2

ベクトルで乗算したい行列の配列があります (したがって、行列の最初の配列にベクトルの最初の値を乗算する必要があります)。

import numpy as np

# Three matrices/double arrays                                              
a = np.array([[1,2], [3, 4]])
b = np.array([[2,3], [4, 5]])
c = np.array([[3,4], [5, 6]])

# An array of matrices                                                      
d = np.array([a, b, c])

# A vector                                                                  
e = np.array([1,2,3])

# Multiply every matrix by the corresponding value in the vector            
f = [ d[i] * e[i] for i in range(len(e)) ]

# Somewhat to my surpise however, this doesn't work                         
g = d * e # <-- Doesn't work

# Nor does                                                                  
h = e * d # <-- Doesn't work

したがって、リスト内包表記は機能しますが、それが最も効率的な方法であるかどうかは疑問です。

私は本当に単純なものを見落としていますか?

4

1 に答える 1

1

軸を揃える必要があります。

f = d * e[:,np.newaxis,np.newaxis]

d.shape
(3, 2, 2)
e.shape
(3,)
e[:,np.newaxis,np.newaxis].shape
(3, 1, 1)

別の方法は、dの形状 (2,2,3) を作成eし、(形状 (3,) を使用して)dの形状にブロードキャスト可能にすることです。

あなたが本当に望んでいるのは、放送についてもっと学ぶことです。

編集:

2番目の質問については、インプレース乗算について:

d *= e[:,np.newaxis,np.newaxis]

コピーは作成されません。

于 2013-05-15T13:44:41.420 に答える