如果我比较两个类型为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”。
答案 0 :(得分:1)
首先,
a = np.array([1,2])
b = np.array([], dtype='int32')
a
不一定是int32数组;它取决于您机器的原生整数类型。我无法解释你的空bool数组行为,因为我无法重现它。
现在,“比较float64
类型的两个ndarray”是什么意思?比较它们以确定它们是否是相同的形状,并且每个元素是否相同?由于多种原因,使用==
这是一个坏主意。
首先,当两者具有相同形状时的结果将不是布尔值而是布尔数组。至少你想在结果数组上调用np.all()
。
此外,如果一个或另一个数组是某些浮点计算的结果,由于浮点舍入误差,它们可能实际上相等但不完全相等。 np.allclose(a1, a2)
函数是针对这种情况设计的(您可以指定关键字参数来更改容差级别);如果两个数组的形状不同,它也会优雅地返回False
。