9

numpy では、numpy.dot()関数を使用して 2 つの 2D 配列の行列積を計算できます。2 つの 3D 配列 X と Y (たとえば) があり、行列 Z を計算したいと思いZ[i] == numpy.dot(X[i], Y[i])ますi。これを非反復的に行うことは可能ですか?

4

1 に答える 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

これは (docstring が述べているように)、matrix_multiply提供するため機能します。

matrix_multiply(x1, x2[, out]) マトリックス

最後の 2 次元の乗算

于 2011-06-10T01:09:37.993 に答える