将空数组与任何标量进行比较都会得到一个空数组

时间:2018-07-15 13:43:57

标签: python arrays numpy

In [2]: a = np.random.random(4)
In [3]: a
Out[3]: array([0.87932117, 0.77583433, 0.82855167, 0.52718255])

In [4]: empty = a[4:]

In [5]: empty
Out[5]: array([], dtype=float64)

In [9]: normal = a[0]

In [10]: normal
Out[10]: 0.879321173826548

In [11]: bigger = np.maximum(empty, normal)

In [12]: bigger
Out[12]: array([], dtype=float64)

我的代码如上所示。我得到一个空数组empty和一个普通数组normal,然后使用np.maximum()函数查找数组元素bigger的按元素最大值。

我很好奇我得到的结果是empty吗?

3 个答案:

答案 0 :(得分:3)

根据Numpy文档numpy.maximum比较两个数组,并返回一个新的数组,其中包含按元素的最大值。仅当数组具有相同大小或两个或两个参数均为标量时,该方法才有效。

对于一个空数组,您没有什么可比较的,因此该函数返回一个空数组。

答案 1 :(得分:0)

这似乎是因为numpy.maximum不会返回较大的数组,而是按元素进行比较并返回每个数组的最大值的数组,请参见此处:

https://docs.scipy.org/doc/numpy/reference/generated/numpy.maximum.html

因此,在您的示例中,由于empty中没有要比较的元素,numpy.maximum准确地返回了一个空数组。

答案 2 :(得分:0)

我已编辑问题标题。正如PM 2Ring指出的那样,我的normal只是一个标量。 实际上,当使用空数组与普通数组进行比较时,会导致错误

ValueError: operands could not be broadcast together with shapes (0,) (..normal.shape)