Python:更改np.array的格式或允许in1d函数中的容差

时间:2014-05-07 14:42:04

标签: python arrays numpy intersection

我有两个numpy数组(加载np.loadtxt的数据文件)。它们的长度不同(或行数,如果你愿意的话)。

我想创建一个掩码,在那里我找到较大数组中较小数组中的值。为此,我可以使用np.in1d。但是,较大阵列的精度也较高。我的问题在以下示例中说明

a = np.array([1.011, 2.000, 3.001])
b = np.array([1.01, 3.00])
mask = np.in1d(a, b)

c
array([False, False, False], dtype=bool)

我想要的是c

c
array([True, False, True], dtype=bool)

那么有没有办法允许np.in1d允许容差(tol=0.01)或更改数组a的精度?我也对原因的其他解决方案持开放态度。

1 个答案:

答案 0 :(得分:2)

你可以这样做,如下所示。如果ab变大,则需要大量内存(按照a和b大小的乘积顺序)。如果这是一个问题,也许你可以循环到足够小的b块。

import numpy as np

def in1d_tol(a,b,tol):
    d=np.abs(a-b[:,np.newaxis])
    return np.any(d<=tol, axis=0)

a = np.array([1.011, 2.000, 3.001])
b = np.array([1.01, 3.00])

c = in1d_tol(a,b,0.01)

print c