Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Row-wise scaling with Numpy

Tags:

python

numpy

I have an array H of dimension MxN, and an array A of dimension M . I want to scale H rows with array A. I do it this way, taking advantage of element-wise behaviour of Numpy

H = numpy.swapaxes(H, 0, 1)
H /= A
H = numpy.swapaxes(H, 0, 1)

It works, but the two swapaxes operations are not very elegant, and I feel there is a more elegant and consise way to achieve the result, without creating temporaries. Would you tell me how ?

like image 844
Monkey Avatar asked Jul 02 '26 03:07

Monkey


1 Answers

I think you can simply use H/A[:,None]:

In [71]: (H.swapaxes(0, 1) / A).swapaxes(0, 1)
Out[71]: 
array([[  8.91065496e-01,  -1.30548362e-01,   1.70357901e+00],
       [  5.06027691e-02,   3.59913305e-01,  -4.27484490e-03],
       [  4.72868136e-01,   2.04351398e+00,   2.67527572e+00],
       [  7.87239835e+00,  -2.13484271e+02,  -2.44764975e+02]])

In [72]: H/A[:,None]
Out[72]: 
array([[  8.91065496e-01,  -1.30548362e-01,   1.70357901e+00],
       [  5.06027691e-02,   3.59913305e-01,  -4.27484490e-03],
       [  4.72868136e-01,   2.04351398e+00,   2.67527572e+00],
       [  7.87239835e+00,  -2.13484271e+02,  -2.44764975e+02]])

because None (or newaxis) extends A in dimension (example link):

In [73]: A
Out[73]: array([ 1.1845468 ,  1.30376536, -0.44912446,  0.04675434])

In [74]: A[:,None]
Out[74]: 
array([[ 1.1845468 ],
       [ 1.30376536],
       [-0.44912446],
       [ 0.04675434]])
like image 73
DSM Avatar answered Jul 04 '26 21:07

DSM



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!