2013-05-15 232 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