ndarray比较

时间:2012-04-11 05:36:04

标签: python numpy

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

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

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

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

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

a==b返回False

是什么给出的?为什么返回的类型不同?我要做的是比较两个类型为float64的ndarray。

这是在python 2.6.4,numpy 1.6.1,Windows XP

上完成的

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

1 个答案:

答案 0 :(得分:1)

首先,

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

a不一定是int32数组;它取决于您机器的原生整数类型。我无法解释你的空bool数组行为,因为我无法重现它。

现在,“比较float64类型的两个ndarray”是什么意思?比较它们以确定它们是否是相同的形状,并且每个元素是否相同?由于多种原因,使用==这是一个坏主意。

首先,当两者具有相同形状时的结果将不是布尔值而是布尔数组。至少你想在结果数组上调用np.all()

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