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

2 投票
1 回答
539 浏览
提问于 2025-04-18 05:41

我有两个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

你可以按照下面的方式来做。如果 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

撰写回答