NumPy array_equal函数未按预期工作

时间:2015-09-21 13:20:28

标签: python arrays numpy

我观察array_equal函数NumPy的非常奇怪的行为。我确定我错过了一个非常简单的细节。

我想要完成的是单元测试。

事实是,我有阵列1:

In[21]: bounds['lowerBound']

Out[21]: array([ 1. ,  1.2,  1.8])

我有阵列2:

In[22]: res['lowerBound']

Out[22]: array([ 1. ,  1.2,  1.8])

以防我检查他们的形状:

In[26]: bounds['lowerBound'].shape
Out[26]: (3,)
In[28]: res['lowerBound'].shape
Out[28]: (3,)

也是dtypes:

In[30]: res['lowerBound'].dtype
Out[30]: dtype('float64')
In[31]: bounds['lowerBound'].dtype
Out[31]: dtype('float64')

仍然在我尝试验证它们是否相同时:

In[29]:  np.array_equal(bounds['lowerBound'],res['lowerBound'])
Out[29]: False

怎么可能?

提前感谢!

编辑: 用于生成数据的代码是:

bounds={'lowerBound':np.array([1.,1.2,1.8]), 'upperBound':np.array([10.,12.,18.])}

res字典由以下函数生成:

def generateAdjustedBounds(self,universeMktCap,lowerBound,upperBound):
    lb=np.zeros(len(universeMktCap))
    ub=np.zeros(len(universeMktCap))
    lb[0]=lowerBound
    ub[0]=upperBound

    for dat in range(1,len(lb)):
        lb[dat]=lb[dat-1]*universeMktCap[dat]/universeMktCap[dat-1]
        ub[dat]=ub[dat-1]*universeMktCap[dat]/universeMktCap[dat-1]

    Bounds={'lowerBound':np.array(lb),'upperBound':np.array(ub)}

    return Bounds

1 个答案:

答案 0 :(得分:4)

因为你的元素是浮点数,所以你应该使用allclose()代替。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html