使用in1d函数测试数组之间的相等性

时间:2016-01-03 15:21:01

标签: python arrays scipy

在我提出问题之前,我会向您提供代码。

代码

from scipy import *
x = randn(10)
cum_x = cumsum(x)
#The objective is to recover x using cum_x and the diff function.
y = append(cum_x[0],diff(cum_x))
#Now, y should be equal to x but this is not confirmed by the function in1d
test = in1d(x,y)

即使y和x明显相同,变量test也不会返回“True”布尔值的数组。这有什么问题?

提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用set_printoptions来提高精确度,您会看到一些差异:

from scipy import *
set_printoptions(30)
x = randn(10)
cum_x = cumsum(x)

#The objective is to recover x using cum_x and the diff function.
y = append(cum_x[0], diff(cum_x))
print(x)
print("\n")
print(y)
#Now, y should be equal to x but this is not confirmed by the function in1d
test = in1d(x, y)
print(test)

输出:

[ 0.54816314147543721002620031868   0.14319052613251953554041051575
  0.489110961092741158839913850898 -0.093011827554544138085823590245
 -0.58370623188476589149331630324  -0.40395493550429123486011917521
  0.387387395892057895263604905267  1.001637373359834937147638811439
 -1.486778459872974744726548124163  1.446772274227251076084144187917]


[ 0.54816314147543721002620031868   0.143190526132519591051561747008
  0.48911096109274110332876261964  -0.093011827554544179719187013688
 -0.58370623188476589149331630324  -0.40395493550429123486011917521
  0.387387395892057895263604905267  1.001637373359834937147638811439
 -1.486778459872974744726548124163  1.446772274227251076084144187917]
[ True False False False  True  True  True  True  True  True]

你可能想要的是allclose但有趣的是在我的ubuntu系统上将dtype设置为np.float128np.longdouble并不会失去精度,in1d会返回True。

 cum_x = cumsum(x,dtype=np.longdouble)