前提・実現したいこと
python3.7 numpyを使用して、行列の配列に対して内積をしたいと考えております。
行列は、
A[3][3][x]
B[3][x]
xは数千程度で、
A[3][3]・B[3]の結果をx分格納した結果を取得したいのですが、
numpyのdot積分を使用して、
np.dot(A,B.T)
と記述すると、思った結果が得られないという状況です。
例として、次のようなコードを書いた場合に
a = np.asarray([[[1, 2 , 3], [4, 5, 6], [7, 8, 9]]
, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
, [[1, 2, 3], [4, 5, 6], [7, 8, 9]]])
b = np.asarray([[1, 0, 0],[2, 0, 0], [3, 0, 0], [4, 0, 0]])
c = np.dot(a, b.T)
print(c)
求める結果は
[[ 1 4 7]
[ 2 8 14]
[ 3 12 21]
[ 4 16 28]]
なのですが、実際の出力は、
[[[ 1 2 3 4]
[ 4 8 12 16]
[ 7 14 21 28]]
[[ 1 2 3 4]
[ 4 8 12 16]
[ 7 14 21 28]]
[[ 1 2 3 4]
[ 4 8 12 16]
[ 7 14 21 28]]
[[ 1 2 3 4]
[ 4 8 12 16]
[ 7 14 21 28]]]
となります。
これを解決するために、
c = np.empty([b.shape[0],b.shape[1]])
for i in range(b.shape[0]):
buf = b[i]
c[i] = np.dot(a[i],buf.T)
print(c)
としたところ、
[[ 1. 4. 7.]
[ 2. 8. 14.]
[ 3. 12. 21.]
[ 4. 16. 28.]]
となり、求める結果を得ることはできました。
しかし、せっかくnumpyを使用しているのに、for文で回しているので、
for文を使わずに、もっといい書き方があれば、ご教授いただければと思います。
宜しくお願いいたします。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/24 13:00