dot : 对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和:
a = np.arange(12).reshape(2,3,2)
b = np.arange(12,24).reshape(2,2,3)
c = np.dot(a,b)
a
Out[54]:
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]]])
a.ndim
Out[55]: 3
#3维数组,2层三行两列
b
Out[56]:
array([[[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23]]])
c
Out[57]:
array([[[[ 15, 16, 17],
[ 21, 22, 23]],
[[ 69, 74, 79],
[ 99, 104, 109]],
[[123, 132, 141],
[177, 186, 195]]],
[[[177, 190, 203],
[255, 268, 281]],
[[231, 248, 265],
[333, 350, 367]],
[[285, 306, 327],
[411, 432, 453]]]])
c.ndim
Out[58]: 4
a.shape
Out[59]: (2, 3, 2)
c.shape
Out[60]: (2, 3, 2, 3)
([[[[ 15, 16, 17],
[ 21, 22, 23]],
第一行各数字为
a数组第一层第1个数字乘以b数组第一层第1行各数字
+
a数组第一层第2个数字乘以b数组第一层第2行各数字
[ 15, 16, 17]=0*[12, 13, 14]+1*[ 15, 16, 17]
第二行同样,只是换到了第二层
a数组第一层第1个数字乘以b数组第二层第1行各数字
+
a数组第一层第2个数字乘以b数组第二层第2行各数字
[ 21, 22, 23]=0*[18, 19, 20]+1*[ 21, 22, 23]
之后都是同样的规则。