在numpy中计算子数组的点积

9 投票
1 回答
4172 浏览
提问于 2025-04-16 19:17

在numpy中,numpy.dot()这个函数可以用来计算两个二维数组的矩阵乘法。我有两个三维数组X和Y(假设是这样),我想计算一个矩阵Z,其中每个Z[i]等于numpy.dot(X[i], Y[i]),对于所有的i来说。这种计算有没有办法不使用循环来完成呢?

1 个回答

8

这样做怎么样:

from numpy.core.umath_tests import inner1d
Z = inner1d(X,Y)

举个例子:

X = np.random.normal(size=(10,5))
Y = np.random.normal(size=(10,5))
Z1 = inner1d(X,Y)
Z2 = [np.dot(X[k],Y[k]) for k in range(10)]
print np.allclose(Z1,Z2)

返回 True

编辑 更正一下,因为我没注意到问题中的3D部分

from numpy.core.umath_tests import matrix_multiply
X = np.random.normal(size=(10,5,3))
Y = np.random.normal(size=(10,3,5))
Z1 = matrix_multiply(X,Y)
Z2 = np.array([np.dot(X[k],Y[k]) for k in range(10)])
np.allclose(Z1,Z2)  # <== returns True

之所以这样有效,是因为(正如文档中所说),matrix_multiply 提供了

matrix_multiply(x1, x2[, out]) 矩阵

在最后两个维度上进行乘法运算

撰写回答