我正在阅读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)后面做什么?
np.dot(a,b)[2,3,2,1,2,2]
[2,3,2,1,2,2]
np.dot(a,b)
3phpmpom1#
当你用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])在我们的例子中,
np.dot
a
b
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)的反直观维数。
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。
c
c[2,3,2,1,2,2]
1条答案
按热度按时间3phpmpom1#
当你用
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])
在我们的例子中,
当你点上它们时,
你得到
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
。