简体   繁体   中英

Python and numpy : subtracting line by line a 2-dim array from a 1-dim array

In python, I wish to subtract line by line a 2-dim array from a 1-dim array.

I know how to do it with a 'for' loop and indexes but I suppose it may be quicker to use numpy functions. However I did not find a way to do it. Here is an example with a 'for' loop :

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]

And here is an example of something that does not work, replacing the 'for' loop by this:

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

Dou you have suggestions ?

The problem is that yx have the respective shapes (2) (2,5) . To do proper broadcasting, you'll need shapes (2,1) (2,5) . We can do this with .reshape as long as the number of elements are preserved:

y.reshape(2,1) - x

Gives:

array([[19, 18, 17, 16, 15],
   [ 4,  3,  2,  1,  0]])
y[:,newaxis] - x 

should work too. The (little) comparative benefit is then you pay attention to the dimensions themselves, instead of the sizes of dimensions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM