首页 > 解决方案 > 将 numpy 数组与容差进行比较

问题描述

我正在尝试比较存储在 numpy 数组中的浮点数。我希望将它们与公差进行比较,并且数组的每个数字都应该与其他数组的每个数字进行比较。我的尝试如下所示,我使用了两个简单的数组作为示例,但它的问题是它只比较具有相同索引的数字。

b_y_ion_mass =  np.array([1.000, 2.1300, 3.4320, 6.0000]) 
observed_mass_array = np.array([0.7310, 2.2300, 5.999, 8.000, 9.000])

abs_tol = 0.2 

for (fragment, mass) in zip(b_y_ion_mass, observed_mass_array): 
    if (fragment+abs_tol)> mass and (fragment-abs_tol)< mass:
        print(mass)

如果有人可以帮助我,那就太好了。

谢谢你。

标签: pythonarraysnumpy

解决方案


你可以做:

diff_matrix = b_y_ion_mass - observed_mass_array[:, np.newaxis]

用 b 中的每一项减去 a 中的每一项:

array([[ 2.690e-01,  1.399e+00,  2.701e+00,  5.269e+00],
       [-1.230e+00, -1.000e-01,  1.202e+00,  3.770e+00],
       [-4.999e+00, -3.869e+00, -2.567e+00,  1.000e-03],
       [-7.000e+00, -5.870e+00, -4.568e+00, -2.000e+00],
       [-8.000e+00, -6.870e+00, -5.568e+00, -3.000e+00]])

然后取绝对值并与您的公差进行比较:

valid = abs(diff_matrix) < abs_tol

输出:

array([[False, False, False, False],
       [False,  True, False, False],
       [False, False, False,  True],
       [False, False, False, False],
       [False, False, False, False]])

所以你可以在这里看到第一个数组中的第二项减去第二个数组中的第二项小于你的容差。此外,第一个数组中的最后一项减去第二个数组中的第三项小于您的容差


推荐阅读