Python返回两个数组的交集

2024-05-19 15:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数组,我试图返回一个新数组,它等于我原来两个数组的交集。两个原始数组的长度应该相同。例如,如果我有:

arr1 = np.array([(255, 255, 255), (255, 255, 255)])

arr2 = np.array([(255, 255, 255), (255, 255, 255)])

我应该得到:

intersectedArr = ([(255, 255, 255), (255, 255, 255])

但是,如果我有:

arr1 = np.array([(100, 100, 100), (255, 255, 255)])

arr2 = np.array([(255, 255, 255), (255, 255, 255)])

我应该得到

([(255, 255, 255)])

到目前为止,我尝试过:

intersectedArr = np.intersect1d(arr1, arr2)

但这将返回[255],而不是预期的([(255, 255, 255)])

有人能帮忙吗?提前谢谢!在


Tags: np数组arrayarr1arr2intersect1dintersectedarr
3条回答

不确定您的阵列会有多大,但如果它们保持相当小,这可能会起作用:

import numpy as np

arr1 = np.array([(255, 255, 255), (255, 255, 255)])
arr2 = np.array([(255, 255, 255), (255, 255, 255)])
intersectedArr = []

for a1, a2 in zip(arr1, arr2):
    if np.array_equal(a1, a2):
        intersectedArr.append(a1)
print(np.array(intersectedArr))

arr1 = np.array([(100, 100, 100), (255, 255, 255)])
arr2 = np.array([(255, 255, 255), (255, 255, 255)])
intersectedArr = []

for a1, a2 in zip(arr1, arr2):
    if np.array_equal(a1, a2):
        intersectedArr.append(a1)
print(np.array(intersectedArr))

如果您想保留重复项,例如在示例中,可以使用列表理解:

def intersection(list_a, list_b):
    return [ e for e in list_a if e in list_b ]

产生:

^{pr2}$

如果您希望列表(集合)之间的组合是唯一的:

def intersection(a, b):
    return list(set(a).intersection(b))

产生:

in:
    [(255, 255, 255), (255, 255, 255)]
    [(255, 255, 255), (255, 255, 255)]
out:
    [(255, 255, 255)]

in:
    [(100, 100, 100), (255, 255, 255)]
    [(255, 255, 255), (255, 255, 255)]
out:
    [(255, 255, 255)]

干杯!在

一个numpy答案怎么样?在

import numpy as np


arr1 = np.array([(255, 255, 255), (255, 255, 25)])  # changed some to 25
arr2 = np.array([(255, 25, 255), (255, 255, 25)])

arr1[np.where(arr1==arr2)]

array([255, 255, 255, 255,  25])

第二个例子

^{pr2}$

相关问题 更多 >