2012-04-11 25 views
2

如果我比较类型float64,其中一人是空的两个ndarrays,我得到布尔的一个空数组:ndarray比较

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

x==y返回与D型的bool空ndarray。

但是,如果我比较int32类型,其中一人是空的两个ndarrays,我得到错误:

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

a==b个返回False

是怎么回事?为什么返回的类型不同?我试图做的是比较float64类型的两个ndarrays。

这正在对蟒蛇2.6.4,1.6.1 numpy的,Windows XP中做

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

+3

我不能在python/numpy/platform的任何组合上重现浮点情况我已经试过了,包括MacOS 10.6/python 2.5/numpy 1.3,Linux 64位/ python 2.6/numpy 1.4和Windows 7 32bit/python 2.7/numpy 1.6.1。 – talonmies 2012-04-11 06:56:45

+2

@talonmies:同样的事情在这里:都如预期的那样返回False(Mac OS X 10.7,Mac Port的NumPy 1.6.1 for Python 2.7.2)。 – EOL 2012-04-11 06:59:19

+2

@MartinisGroup:你的意思是“两个'''float64'类型的ndarrays”吗? – EOL 2012-04-11 07:00:38

回答

1

所以首先,

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

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

现在,你是什么意思“比较float64类型的两个ndarrays”?比较他们看看他们是否是相同的形状,如果每个元素是相同的?由于几个原因,使用==这是一个糟糕的主意。

首先,两个形状相同的结果不会是布尔值,而是布尔值数组。至少你会想在结果数组上调用np.all()。另外,如果一个或另一个数组是一些浮点计算的结果,由于浮点舍入错误,它们可能实际上相等但不完全相等。 np.allclose(a1, a2)函数是为这种情况设计的(您可以指定关键字参数来更改容差级别);如果两个阵列具有不同的形状,它也会优雅地返回False