我观察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
答案 0 :(得分:4)
因为你的元素是浮点数,所以你应该使用allclose()代替。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html