【问题标题】:ndarray comparison数组比较
【发布时间】:2012-04-11 05:36:03
【问题描述】:

如果我比较两个 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'类型的两个ndarrays”->“试图比较'float64'类型的两个ndarrays”。

【问题讨论】:

  • 我无法在我尝试过的任何 python/numpy/platform 组合上重现浮点大小写,包括 MacOS 10.6/python 2.5/numpy 1.3、Linux 64 位/python 2.6 /numpy 1.4 和 Windows 7 32 位/python 2.7/numpy 1.6.1。
  • @talonmies:同样的事情:两者都返回 False,正如预期的那样(Mac OS X 10.7,Mac Port 的 NumPy 1.6.1 for Python 2.7.2)。
  • @MartinisGroup:您的意思是“float64 类型的两个 ndarrays”吗?

标签: python numpy


【解决方案1】:

首先,

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-09-18
    • 2016-01-24
    • 2021-11-28
    • 2018-12-03
    • 2011-02-07
    • 2019-02-01
    • 2023-03-19
    • 2013-04-29
    • 1970-01-01
    相关资源
    最近更新 更多