Python ValueError在将数组除以其自己的列时

时间:2015-03-28 16:54:49

标签: python arrays python-3.x numpy

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,)。它将整个数组与该特定数组中的列分开。有什么建议?有一个类似的帖子,但没有坚实的答案。

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}}