2013-05-15 59 views
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 

所以列表理解的作品,但我懷疑如果這是最有效的方式做事。

我可以忽略一些非常簡單的東西嗎?

回答

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的形狀。

你真正想要的是要更多地瞭解broadcasting

編輯:

爲你的第二個問題,對於就地乘法:

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

創建任何副本。

+0

謝謝。這樣可行!但是......如何......?!? – Tom

+0

此外,形成它看起來像,我得到的矩陣複製的印象,對.. ..?? 我可以在d上做類似的技巧嗎(因爲這會更便宜,我認爲)\ – Tom

+0

當然。請參閱我的編輯 – shx2