我有两个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
的精度?我也对原因的其他解决方案持开放态度。
答案 0 :(得分:2)
你可以这样做,如下所示。如果a
和b
变大,则需要大量内存(按照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