2016-11-18 8 views
0

私は、次元500x2000x30の行列Aと次元30x5の行列Bを持っています。Pythonでの多次元行列の乗算

行列Aのサイズが500x2000x30であるので、2000x30のインスタンスが500個あると考えることができます。

Aからの1x2000x30のそれぞれに行列Bを掛けて、新しいサイズの行列1x2000x5を取得したいとします。

すなわちA X Bは私に明らかに行列Aを通じて500回ループする次元の行列500x2000x5

を与える必要がソリューションですが、これを達成するための効率的な方法はありますか?

編集:あなたは、このためにnp.dot機能を使用することができますnumpy配列がある場合はAとBの両方がnumpyの配列

+1

:Nの大きさのために、それは最後の軸と最後から2番目のBのオーバー合計製品があります。 numpy配列がある場合、これは 'numpy.dot'のかなり簡単なアプリケーションでなければなりません。 – filmor

答えて

3

です:

np.dot(A, B) 

をそれは正確に何をしたいんだろう、すなわち「契約」 Bの第一軸とAの最後軸:

2次元配列の場合には、行列の乗算に相当し、1-D ARR用ベクトルの内積(複素共役なし)。あなたのデータがどのように表現されるかに大きく依存

dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m]) 
+2

または 'a @ b' on python 3.5 + –