在numpy中计算子数组的点积
在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]) 矩阵
在最后两个维度上进行乘法运算