numpy中的高维矩阵相乘机制

本文通过实例展示了numpy、tensorflow和pytorch中高维矩阵相乘的机制。高维矩阵相乘实际上是将每个二维子矩阵进行相乘,而非笛卡尔积,保持了非最后两维的矩阵尺寸不变。通过对比不同维度矩阵的相乘结果,验证了这一原则,并通过代码验证了这一过程。
摘要由CSDN通过智能技术生成

numpy/tensorflow/pytorch高维矩阵相乘机制

举个栗子:

import numpy as np
a1 = np.array([[1, 2], [3, 5]])
a2 = np.array([[2, 5], [3, 1]])
A = np.stack([a1, a2], axis=0)
A.shape, a1.shape
>> ((2, 2, 2), (2, 2))
b1 = np.array([[1, 2, 3], [1, 3, 5]])
b2 = np.array([[2, 2, 4], [5, 3, 2]])
B = np.stack([a1, a2], axis=0)
B.shape, b1.shape
>> ((2, 2, 3), (2, 3))
print("a1 matmul b1 \n", np.matmul(a1, b1), '\n')
print("a1 matmul b2 \n", np.matmul(a1, b2), '\n')
print("a2 matmul b1 \n", np.matmul(a2, b1), '\n')
print("a2 matmul b2 \n", np.matmul(a2, b2), '\n')

print("A matmul B \n", np.matmul(A, B))
print(f"np.matmul(a1, b1) == np.matmul(A, B)[0] {(np.matmul(a1, b1) == np.matmul(A, B)[0]).all()}")
print(f"np.matmul(a2, b2) == np.matmul(A, B)[1] {(np.matmul(a2, b2) == np.matmul(A, B)[1]).all()}")

>> a1 matmul b1 
 [[ 3  8 13]
 [ 8 21 34]] 

>> a1 matmul b2 
 [[12  8  8]
 [31 21 22]] 

>> a2 matmul b1 
 [[ 7 19 31]
 [ 4  9 14]] 

>> a2 matmul b2 
 [[29 19 18]
 [11  9 14]] 

>> A matmul B 
 [[[ 3  8 13]
  [ 8 21 34]]

 [[29 19 18]
  [11  9 14]]]
>> np.matmul(a1, b1) == np.matmul(A, B)[0] True
>> np.matmul(a2, b2) == np.matmul(A, B)[1] True

​ 可见,对于高维矩阵的相乘实质上是对高维矩阵中每个二维矩阵相乘。值得注意的是,这里的相乘并非笛卡尔积,而是对应位置的矩阵相乘,因此不会改变除了最后两维的矩阵维度(如果利用广播机制除外)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值