Python和numpy:逐行从1-dim数组中减去2-dim数组

时间:2012-04-16 17:32:04

标签: python arrays math numpy

在python中,我希望逐行从1-dim数组中减去2-dim数组。

我知道如何使用'for'循环和索引,但我想使用numpy函数可能会更快。但是我没有办法做到这一点。这是一个带有'for'循环的例子:

from numpy import *
x=array([[1,2,3,4,5],[6,7,8,9,10]])
y=array([20,10])
j=array([0, 1])
a=zeros([2,5])
for i in j :
...     a[i]=y[i]-x[i]

这是一个不起作用的例子,用这个替换'for'循环:

a=y[j]-x[j,i]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape
你有建议吗?

2 个答案:

答案 0 :(得分:7)

问题是y-x具有各自的形状(2) (2,5)。要进行正确的广播,您需要形状(2,1) (2,5)。只要保留元素的数量,我们就可以使用.reshape执行此操作:

y.reshape(2,1) - x

给出:

array([[19, 18, 17, 16, 15],
   [ 4,  3,  2,  1,  0]])

答案 1 :(得分:2)

y[:,newaxis] - x 

也应该有用。 (小)比较的好处是你要注意尺寸本身,而不是尺寸的大小。