Python:更改np.array格式或允许in1d函数的容差
我有两个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 个回答
3
你可以按照下面的方式来做。如果 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