Numpy
数组A = [[1, 2, 3, 4], [1, 2, 3, 4 ]]
和C = A[:,1]
。 B应为A / C.我期待B to be [[0.5, 1, 1.5, 2], [0.5, 1, 1.5, 2]]
我正在尝试使用普通除法或numpy
除法,但得到错误ValueError: operands could not be broadcast together with shapes (2,4) (2,)
。它将整个数组与该特定数组中的列分开。有什么建议?有一个类似的帖子,但没有坚实的答案。
答案 0 :(得分:5)
要使广播成为可能,请在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. ]])
答案 1 :(得分:2)
NumPy broadcasts。如果要在右侧添加新轴,则必须手动执行:
B = A/C[:, np.newaxis]
A
的形状为(2,4)
,C
的形状为(2,)
。我们需要C
为(2,4)
设置形状A/C
才有意义。如果我们在C
的右侧添加一个新轴,那么C
将具有(2,1)
形状,然后NumPy会在{(2,4)
分割时形成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]])
1}}。
B = A/C[:, np.newaxis]
通过在左侧添加新轴作为NumPy broadcasts。如果要在右侧添加新轴,则必须手动执行:
A
(2,4)
的形状为C
,(2,)
的形状为C
。我们需要(2,4)
为A/C
设置形状C
才有意义。如果我们在右侧向C添加一个新轴,那么(2,1)
将具有(2,4)
形状,然后NumPy会在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]])
。
A
正如Ashwini Chaudhary所示,将C
(或In [113]: A.astype(float)/C[:, np.newaxis]
Out[113]:
array([[ 0.5, 1. , 1.5, 2. ],
[ 0.5, 1. , 1.5, 2. ]])
)转换为float dtype以使NumPy执行浮点除法:
{{1}}