2014-01-21 93 views
1

我有2个多维数组。我想乘这些数组。numpy中的多维数组乘法

我的两个数组具有形状:

shape : (3, 100) 

我想转换的matlab代码:

sum(q1.*q2) 

np.dot(q1, q2) 

给我输出:

ValueError: objects are not aligned 
+1

'np.dot'是矩阵乘法,numpy的使用''*为元素方式乘法。 –

+0

@BiRico - 这也是我的第一个想法(但我没有足够的信心在我的matlab中知道'。*'操作符在干什么)。为什么不把它作为答案? – mgilson

回答

1
一个样品运行

我安装八度的,当被要求做

sum(a .* b) 

ab具有形状(3, 100),返回形状(1, 100)的数组。在numpy的准确当量将是:

np.sum(a * b, axis=0) 

返回形状(100,)的数组,或者如果你想保持尺寸1的尺寸:

np.sum(a * b, axis=0, keepdims=True) 

你可以得到相同的结果,可能更快,使用np.einsum

np.einsum('ij,ij->j', a, b) 
2

使用矩阵元素之积的*代替dot产物

这里是具有减小的尺寸

实施

A = np.random.randint(5,size=(3,4)) 
B = np.random.randint(5,size=(3,4)) 
result = A * B 

演示

>>> A 
array([[4, 1, 3, 0], 
     [2, 0, 2, 2], 
     [0, 1, 1, 1]]) 
>>> B 
array([[1, 3, 0, 2], 
     [3, 4, 1, 2], 
     [3, 0, 4, 3]]) 
>>> A * B 
array([[4, 3, 0, 0], 
     [6, 0, 2, 4], 
     [0, 0, 4, 3]])