Numpy
arrays A = [[1, 2, 3, 4], [1, 2, 3, 4 ]]
and C = A[:,1]
. B should be A/C. I am expecting B to be [[0.5, 1, 1.5, 2], [0.5, 1, 1.5, 2]]
I am trying to do the same using normal division, or numpy
division, but get an error, ValueError: operands could not be broadcast together with shapes (2,4) (2,)
. It is dividing an entire array with a column in that particular array. Any suggestions? There is a similar post, but no solid answers to it.
To make broadcasting possible here add one more axis to C
:
>>> A = np.array([[1, 2, 3, 4], [1, 2, 3, 4 ]], dtype=float)
>>> C = A[:,1][:, None]
>>> A/C
array([[ 0.5, 1. , 1.5, 2. ],
[ 0.5, 1. , 1.5, 2. ]])
NumPy broadcasts by adding new axes on the left. If you want to add a new axis on the right, you must do so manually:
B = A/C[:, np.newaxis]
A
has shape (2,4)
and C
has shape (2,)
. We need C
to have shape (2,4)
for A/C
to make sense. If we add a new axis on the right-hand-side to C
, then C
would have shape (2,1)
which NumPy then broadcasts to shape (2,4)
upon division with A
.
In [73]: A = np.array([[1, 2, 3, 4], [1, 2, 3, 4]])
In [74]: C = A[:,1]
In [75]: A.shape
Out[75]: (2, 4)
In [76]: C.shape
Out[76]: (2,)
In [77]: B = A/C[:, np.newaxis]
In [78]: B
Out[78]:
array([[0, 1, 1, 2],
[0, 1, 1, 2]])
As NumPy broadcasts by adding new axes on the left. If you want to add a new axis on the right, you must do so manually:
B = A/C[:, np.newaxis]
A
has shape (2,4)
and C
has shape (2,)
. We need C
to have shape (2,4)
for A/C
to make sense. If we add a new axis on th right-hand-side to C, then C
would have shape (2,1)
which NumPy then broadcasts to shape (2,4)
upon division with A
.
In [73]: A = np.array([[1, 2, 3, 4], [1, 2, 3, 4 ]])
In [74]: C = A[:,1]
In [75]: A.shape
Out[75]: (2, 4)
In [76]: C.shape
Out[76]: (2,)
In [77]: B = A/C[:, np.newaxis]
In [78]: B
Out[78]:
array([[0, 1, 1, 2],
[0, 1, 1, 2]])
As Ashwini Chaudhary shows, convert A
(or C
) to a float dtype to make NumPy perform floating-point division:
In [113]: A.astype(float)/C[:, np.newaxis]
Out[113]:
array([[ 0.5, 1. , 1.5, 2. ],
[ 0.5, 1. , 1.5, 2. ]])
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