如何在NumPy二维数组中检索匹配一维match数组所有元素的条目
正确的多值匹配检索实现
你原来的data[ data[:,0] == match ]写法无法生效,原因是一维数组data[:,0]和match长度不一致时,直接用==比较会触发NumPy的广播机制,返回的布尔数组不符合筛选预期。
正确的原生实现用np.isin方法即可:
data[np.isin(data[:,0], match)]
补充说明:你之前写的多匹配写法
data[data[:,0] == match[0] & data[:,0] == match[1] ]逻辑存在问题,&是「与」运算符,不可能存在一个元素同时等于两个不同的match值,你实际需要的「或」逻辑用np.isin可以直接实现,不需要手动写多个条件拼接。
Numba自定义in1d逻辑的可行性
你写的这段逻辑完全可行。np.in1d的底层核心逻辑和这段代码一致,在代码上加上@numba.njit装饰器后就能正常运行,对于短长度的ar2场景,运行效率甚至会比原生np.in1d更高。
如果要进一步优化,可以提前给ar2去重,减少循环的迭代次数:
import numpy as np from numba import njit @njit def custom_in1d(ar1, ar2): # 提前去重优化 ar2_unique = np.unique(ar2) mask = np.zeros(len(ar1), dtype=bool) for a in ar2_unique: mask |= (ar1 == a) return mask
内容的提问来源于stack exchange,提问作者sten
相关产品推荐
相关产品推荐

