我正在阅读numpy文档以获得更好的说明,当我遇到一个示例时,它不是很清楚。我从下面的numpy文档中复制了确切的示例:
a = np.arange(3*4*5*6).reshape((3,4,5,6))
b = np.arange(3*4*5*6)[::-1].reshape((5,4,6,3))
np.dot(a, b)[2,3,2,1,2,2]
问题是,np.dot(a,b)[2,3,2,1,2,2]
的最后一行[2,3,2,1,2,2]
在np.dot(a,b)
之后是什么?
答案 0 :(得分:1)
编辑:我之前的回答是错误的!
如果使用np.dot
将大于2度的数组“点缀”在一起,则必须指定要进行乘和求和的轴。
在此示例中,[2,3,2,1,2,2]
是指分别在a
和b
中选择的轴的参考。
从文档中
如果a是一个N-D数组而b是一个M-D数组(其中M> = 2),则它是一个和 a的最后一个轴和b的倒数第二个轴上的乘积:
dot(a,b)[i,j,k,m] = sum(a [i,j ,:] * b [k,:,m])
所以在我们的情况下,
a[2,3,2,:] = [342, 343, 344, 345, 346, 347]
b[1,2,:,2] = [249, 246, 243, 240, 237, 234]
当你点它们时,
np.dot([249, 246, 243, 240, 237, 234], [342, 343, 344, 345, 346, 347])
您得到499128
使用np.dot(a[2,3,2,:], b[1,2,:,2])
或速记np.dot(a, b)[2,3,2,1,2,2]
时您会得到相同的答案
当您不使用任何索引时,我的假设是您获得了上述内容的所有信息,因此c = np.dot(a, b)
的反直觉维度
编辑#2 形状为c
的原因是,如果按照示例对c[2,3,2,1,2,2]
进行索引,则会得到相应的答案499128