在Python中,我有一个不同大小数组的列表。我想知道列表中包含的所有数组的交集。例如:
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]
我想在
np.intersect1d
中的所有数组中使用像 array_list
这样的函数,并获取所有数据数组的交集。乍一看,答案是
intersection = np.array([5,6])
我尝试过使用列表理解,例如:
np.intersect1d([arraylist[x] for x in np.arange(len(arraylist))]),
但是 Numpy 需要 2 个参数,而不是我提供的参数。出于类似的原因,
list(filter(lambda x:x in [x for x in arraylist]))
不起作用——
filter
期望有2个参数,但只得到一个。
您可以使用
reduce()
模块中的 functools
将多个列表与 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]
print(reduce(np.intersect1d,[array0, array1, array2, array3] ))
输出:-
[5 6]
或使用
sets
使它们相交
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]
print(set.intersection(*map(set,array_list)))
输出:-
{5,6}