Python 带Numpy isin函数的浮点舍入误差
我试图使用Numpy库中的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(θ,已知θ,假设唯一=真,
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()一起使用?将两个数组中的数字四舍五入到小数点后的第二位如何?