有一个numpy.dot文档的例子不太清楚,用的是高维的点积

gijlo24d  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(135)

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

3phpmpom

3phpmpom1#


当你用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

相关问题