如何使用NumPy求Python中列表内所有数组的交集?
解决多个NumPy数组的交集问题
要获取列表中所有数组的交集,np.intersect1d仅支持两个数组的计算,所以需要通过迭代累积的方式处理多个数组,以下是两种可行方案:
方案1:使用functools.reduce简化迭代
reduce可以将二元函数(这里是np.intersect1d)依次应用到列表的所有元素上,逐步累积得到最终交集:
import numpy as np from functools import reduce array0 = [0,1,2,3,4,5,6] array1 = [0,2,3,5,6,7,8,9,10] array2 = [4,5,6] array3 = [5,6,7,8,9,10,11,12,13] array_list = [array0, array1, array2, array3] # 计算所有数组的交集 intersection = reduce(np.intersect1d, array_list) print(intersection) # 输出: [5 6]
方案2:手动循环迭代(更直观)
如果不想引入reduce,可以手动初始化交集为第一个数组,再逐个与后续数组求交集:
import numpy as np array0 = [0,1,2,3,4,5,6] array1 = [0,2,3,5,6,7,8,9,10] array2 = [4,5,6] array3 = [5,6,7,8,9,10,11,12,13] array_list = [array0, array1, array2, array3] # 初始化交集为第一个数组 intersection = np.array(array_list[0]) # 遍历剩余数组,逐步求交集 for arr in array_list[1:]: intersection = np.intersect1d(intersection, arr) print(intersection) # 输出: [5 6]
你的尝试出错原因
np.intersect1d([arraylist[x] for x in ...]):该写法把所有数组打包成一个列表传给函数,但np.intersect1d要求两个独立的数组参数,而非一个包含多个数组的列表。list(filter(lambda x:x in [x for x in arraylist])):filter的第二个参数需要是待筛选的元素集合,你的写法未提供要筛选的元素源,且逻辑上未遍历所有数组完成交集判断。
内容的提问来源于stack exchange,提问作者AaronJPung
相关产品推荐
相关产品推荐

