Python 带Numpy isin函数的浮点舍入误差

Python 带Numpy isin函数的浮点舍入误差,python,arrays,numpy,floating-point,Python,Arrays,Numpy,Floating Point,我试图使用Numpy库中的isin()函数来查找两个数组中的公共元素 看起来很基本,但其中一个数组是使用linspace()创建的,另一个我只是在其中输入了硬值 但是似乎isin()正在使用=进行比较,因此该方法返回的结果缺少一个数字 有没有一种方法可以解决这个问题,或者以不同的方式定义数组,或者使用非isin()的方法 thetas=np.array(np.linspace(.25,50,51)) 已知的θ=[3,35,39,41,45] 未知θ=θ[np.isin(θ,已知θ,假设唯一=真,

我试图使用Numpy库中的
isin()
函数来查找两个数组中的公共元素

看起来很基本,但其中一个数组是使用
linspace()
创建的,另一个我只是在其中输入了硬值

但是似乎
isin()
正在使用
=
进行比较,因此该方法返回的结果缺少一个数字

有没有一种方法可以解决这个问题,或者以不同的方式定义数组,或者使用非
isin()
的方法

thetas=np.array(np.linspace(.25,50,51))
已知的θ=[3,35,39,41,45]
未知θ=θ[np.isin(θ,已知θ,假设唯一=真,反转=真)]
打印这三个数组时,我发现
.41
仍然在第三个数组中,因为当逐个打印它们时,我在第一个数组中的值实际上是
0.41000000000000003
,这意味着
=
比较返回
False
。解决这一问题的最佳方法是什么?

我们可以利用将其中一个数组扩展到
2D
进行外部isclose匹配查找,然后进行
ANY
匹配,得到一个1D布尔数组,该数组可用于屏蔽相关的输入数组-

thetas[~np.isclose(thetas[:,None],known_thetas).any(1)]
要自定义匹配的公差级别,我们可以将自定义的相对和绝对公差值输入到
np.isclose

如果您希望在大型阵列上获得性能,我们可以使用-

tol
arg中输入公差值。

我们可以利用将其中一个数组扩展到
2D
进行外部isclose匹配查找,然后进行
ANY
匹配,得到1D布尔数组,该数组可用于屏蔽相关输入数组-

thetas[~np.isclose(thetas[:,None],known_thetas).any(1)]
要自定义匹配的公差级别,我们可以将自定义的相对和绝对公差值输入到
np.isclose

如果您希望在大型阵列上获得性能,我们可以使用-


tol
arg中输入公差值。

如果有固定的绝对公差,可以在比较前使用四舍五入值:

unknown_thetas=thetas[np.isin(np.around(thetas,5),已知_thetas,假设_unique=True,invert=True)]

这个回合<代码> theta as /Cuto > 5个十进制数字,但是由你来决定这些数字需要多少来考虑它们相等。

如果你有一个固定的绝对容差,你可以在比较之前循环这些值:

unknown_thetas=thetas[np.isin(np.around(thetas,5),已知_thetas,假设_unique=True,invert=True)]

这个回合<代码> Testas <代码> 5个十进制数字,但由你来决定这些数字需要多少来考虑它们是否相等。

尝试<代码> NoMy.ISCux?我如何用ISIN()来使用它??将两个数组中的数字四舍五入到小数点后的第二位如何?请尝试
numpy.isclose
?如何将其与isin()一起使用?将两个数组中的数字四舍五入到小数点后的第二位如何?