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