2

如果我比较两个 float64 类型的 ndarray,其中一个是空的,我会得到一个空的 bool 数组:

x = np.array([1.0,2.1]) #dtype is float64
y = np.array([])        #dtype is float64

x==y返回一个 dtype 为 的空 ndarray bool

但是,如果我比较两个类型的 ndarray int32,其中一个为空,我会得到 False:

a = np.array([1,2])
b = np.array([], dtype='int32')

a==b返回 False

是什么赋予了?为什么返回的类型不同?我想要做的是比较两个类型的 ndarrays float64

这是在 python 2.6.4、numpy 1.6.1、Windows XP 上完成的

编辑:“试图做的是比较'float5'类型的两个ndarrays”->“试图比较'float64'类型的两个ndarrays”。

4

1 回答 1

1

所以首先,

a = np.array([1,2])
b = np.array([], dtype='int32')

a不一定是 int32 数组;这将取决于您机器的本机整数类型。我无法解释您的空布尔数组行为,因为我无法重现它。

现在,“比较两个类型的 ndarray”是什么意思float64?比较它们以查看它们是否具有相同的形状以及每个元素是否相同?这是一个坏主意==,有几个原因。

一方面,当两者形状相同时,结果将不是布尔值,而是布尔值数组。至少你会想要调用np.all()结果数组。

此外,如果一个或另一个数组是某些浮点计算的结果,由于浮点舍入误差,它们可能实际上相等但不完全相等。该np.allclose(a1, a2)函数是针对这种情况设计的(您可以指定关键字参数来更改容差级别);False如果两个数组具有不同的形状,它也会优雅地返回。

于 2012-05-02T21:25:03.230 回答