-1

このような乗算を行う最も簡潔な方法は何ですか?NumPy配列のスカラーを配列の配列で素早く乗算する

# c's are scalars (or arrays like A's in general) 
x = np.array([c1, c2, c3]) 
# A's are NumPy arrays 
M = np.array([A1, A2, A3]) 

x*M = [c1*A1, c2*A2, c3*A3] 

のCさんはスカラーです取得するには、Aさんはnumpyの数値MULTIDIMアレイ(行列、のは言わせ)です。


例コード:

x = np.array([1,2,3]) 
A = np.random.rand(2,2) 
M = np.array([A,A,A]) 
+0

'M'の形状とデータ型は何ですか? 'M 'のすべての*サブ配列*は同じ形をしていますか? – Divakar

+0

'M 'の' dtype'?オブジェクトの1次元配列か、多次元の数値配列ですか? – hpaulj

+0

@hpaulj単純に - np.array'として格納された2D行列を数値の多次元配列としましょう。なぜそれは重要ですか?スカラには何でも乗算することはできますか? – homocomputeris

答えて

0

積= [X [I] * M [I] Iの範囲内(LEN(X))のために]

+0

これは次のようになります: '[A * c for(A、c)in zip(M、x)]'。とにかく、私は理解が遅いと信じています。 – homocomputeris

2

Mはnumpyの配列である場合numpyブロードキャストを利用するためには、Mと同じディメンション数を持つようにxにディメンションを追加してから、要素ごとの乗算を使用してください。

x.reshape((-1,) + (1,)*(M.ndim - 1)) * M 

x = np.array([1,2,3]) 

2Dの場合:

M = np.arange(12).reshape(3,4)  
x.reshape((-1,) + (1,)*(M.ndim - 1)) * M 
#array([[ 0, 1, 2, 3], 
#  [ 8, 10, 12, 14], 
#  [24, 27, 30, 33]]) 

3Dの場合:

M = np.arange(12).reshape(3,2,2) 
x.reshape((-1,) + (1,)*(M.ndim - 1)) * M 
#array([[[ 0, 1], 
#  [ 2, 3]], 

#  [[ 8, 10], 
#  [12, 14]], 

#  [[24, 27], 
#  [30, 33]]]) 
+0

ありがとう、これは動作します。しかし読みやすさ...何が起こっているのか理解するのにはしばらく時間がかかりました:) – homocomputeris

関連する問題