有一个numpy.dot文档示例,尚不清楚

时间:2019-10-07 09:32:32

标签: python numpy

我正在阅读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)之后是什么?

1 个答案:

答案 0 :(得分:1)

编辑:我之前的回答是错误的!

如果使用np.dot将大于2度的数组“点缀”在一起,则必须指定要进行乘和求和的轴。

在此示例中,[2,3,2,1,2,2]是指分别在ab中选择的轴的参考。

  

从文档中

     

如果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