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