如何实现不同长度NumPy数组的逐元素存在性判断?
解决NumPy数组元素存在性判断的问题
嘿,我来帮你搞定这个问题!你想要的其实是NumPy内置的np.isin()函数,它专门用来判断数组中的每个元素是否存在于另一个数组中,直接就能输出和原数组长度一致的布尔数组。
正确实现代码
import numpy as np first = np.array([0,1,2,0,4,2]) second = np.array([1,2]) result = np.isin(first, second) print(result)
运行这段代码会输出:
array([False, True, True, False, False, True])
完全符合你想要的结果!
为什么你之前的方法没成功?
我来帮你分析下你尝试过的几种方式的问题:
np.equal(first, second):这个函数是做逐元素对应相等比较,但因为两个数组长度不同(6 vs 2),NumPy会触发广播机制,把second重复成[1,2,1,2,1,2]再和first比较,结果肯定不是你要的存在性判断。first == np.any(second):np.any(second)会返回一个单一的布尔值True(因为second里有非零元素),所以这行代码等价于first == True,也就是判断first里的元素是否等于1,自然得不到正确结果。- 单独用
np.any:如果写成np.any(first == second[:, np.newaxis], axis=0)其实也能实现,但写法繁琐,远不如np.isin()直观简洁。
额外小提示
如果需要反向判断(元素不存在于second中),可以给np.isin()加个invert=True参数:
result_not = np.isin(first, second, invert=True) print(result_not) # 输出:array([ True, False, False, True, True, False])
内容的提问来源于stack exchange,提问作者puifais
相关产品推荐
相关产品推荐

