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 y-x
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With