1、同维相乘
相乘必须满足以下两个条件:
- 两个n维数组的前n-2维必须完全相同。例如(3,2,4,2)(3,2,2,3)前两维必须完全一致;
- 最后两维必须满足二阶矩阵乘法要求。例如(3,2,4,2)(3,2,2,3)的后两维可视为(4,2)x(2,3)满足矩阵乘法。
这样的同维矩阵相乘,所得到的维度是:前n-2维不变,后2维进行矩阵乘法。
例如,(3,2,4,2)*(1,2,2,3)——>>(3,2,4,3)
注意:由于广播机制,第一维为1的,可以与第一维任何数相乘,例如:
(1,2,4,2)*(3,2,2,3)——>>(3,2,4,3)与上例结果相同。
import numpy as np
# 前两个高维1和2必须对应完全相等!后面两个只需满足矩阵相乘要求即可。
a = np.zeros( (3,2,4,2) )
b = np.zeros( (3,2,2,3) )
w = np.matmul(a,b)
print( w.shape )
# 结果:
(3, 2, 4, 3)
2、不同维度
在使用numpy数组时,不同维度相乘无法使用matmul,而使用*进行的是逐元素相乘。
会通过广播机制补充到同维度,再进行同维度的乘法。
例如(2,2,1)*(0,1)
import numpy as np
a = np.floor(10*np.random.random((2,2,1)))
b = [[0],[1]]
# a.reshape(3,3)
print(a)
print(b)
c = a*b
# c = np.matmul(a,b)
print(c.shape)
print(c)
可得: