在numpy中找到子数组的点积

Ben*_*win 9 python numpy matrix-multiplication

在numpy中,该numpy.dot()函数可用于计算两个2D阵列的矩阵乘积.我有两个3D阵列X和Y(说),我想在那里计算矩阵Z Z[i] == numpy.dot(X[i], Y[i])所有i.这可能是非迭代的吗?

Jos*_*del 8

怎么样:

from numpy.core.umath_tests import inner1d
Z = inner1d(X,Y)
Run Code Online (Sandbox Code Playgroud)

例如:

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)
Run Code Online (Sandbox Code Playgroud)

回报 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
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为(作为文档字符串状态),matrix_multiply提供

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

最后两个维度的乘法