Python 选择两个数组中的值彼此接近的值
Python selecting values that are close to each other with values in both arrays
我有两个数组。
org_df = [2732.64, 2296.35, 1262.28, 567.6, 436.29, 262.98, 238.74, 210.38,19]
calc_df = [19, 2296.34, 436.3, 2732.64]
我想比较这些数组并创建一个具有相同元素且容差为 0.01 的新数组。
new_list = [2732.64, 2296.35 ,436.29,19]
我添加了代码,但它不起作用:
您可以使用 numpy
模块的 isclose
函数来完成。
new_list = [i for i in org_df if np.any(np.isclose(i, calc_df, atol=0.01))]
为避免添加像 numpy 这样的依赖项,您需要遍历两个列表并执行如下操作:
new_list = []
for a in org_df:
for b in calc_df:
if -0.01 < a - b < 0.01:
new_list.append(a)
如果您想改用列表推导式,请使用这个衬里:
new_list = [a for a in org_df for b in calc_df if -0.01 < a - b < 0.01]
如果你使用numpy
:
org_df = np.array([2732.64, 2296.35, 1262.28, 567.6, 436.29, 262.98, 238.74, 210.38,19])
calc_df = np.array([19, 2296.34, 436.3, 2732.64])
new_list = org_df[np.any(np.abs(org_df - calc_df[:, None]) <= 0.01, axis=0)]
print(new_list)
# Output:
array([2732.64, 2296.35, 436.29, 19. ])
如果你不想使用像 numpy 这样的依赖项,你可以使用列表理解和 pythons awesome 范围比较来实现。 Python 非常适合这个!
diff = abs(tolerance)
new_list = [y for x in org_df for y in calc_df if (y-diff <= x <= y+diff)]
给出准确的结果。尽管它可能比 numpy 数组慢。
我有两个数组。
org_df = [2732.64, 2296.35, 1262.28, 567.6, 436.29, 262.98, 238.74, 210.38,19]
calc_df = [19, 2296.34, 436.3, 2732.64]
我想比较这些数组并创建一个具有相同元素且容差为 0.01 的新数组。
new_list = [2732.64, 2296.35 ,436.29,19]
我添加了代码,但它不起作用:
您可以使用 numpy
模块的 isclose
函数来完成。
new_list = [i for i in org_df if np.any(np.isclose(i, calc_df, atol=0.01))]
为避免添加像 numpy 这样的依赖项,您需要遍历两个列表并执行如下操作:
new_list = []
for a in org_df:
for b in calc_df:
if -0.01 < a - b < 0.01:
new_list.append(a)
如果您想改用列表推导式,请使用这个衬里:
new_list = [a for a in org_df for b in calc_df if -0.01 < a - b < 0.01]
如果你使用numpy
:
org_df = np.array([2732.64, 2296.35, 1262.28, 567.6, 436.29, 262.98, 238.74, 210.38,19])
calc_df = np.array([19, 2296.34, 436.3, 2732.64])
new_list = org_df[np.any(np.abs(org_df - calc_df[:, None]) <= 0.01, axis=0)]
print(new_list)
# Output:
array([2732.64, 2296.35, 436.29, 19. ])
如果你不想使用像 numpy 这样的依赖项,你可以使用列表理解和 pythons awesome 范围比较来实现。 Python 非常适合这个!
diff = abs(tolerance)
new_list = [y for x in org_df for y in calc_df if (y-diff <= x <= y+diff)]
给出准确的结果。尽管它可能比 numpy 数组慢。