两个numpy ndarrays的公共元素

Common elements of two numpy ndarrays

我有一个名为 arr 且形状为 (200,) 的 numpy ndarray 和一个元组 tup 包含另一个 ndarray 且形状为 (ndarray( 150,))。我想创建一个新数组,只包含 ndarrays.

共有的元素

从元组中取出ndarray然后比较:

arr2 = tup[0]
combined_arr = []

for i in arr:
  if i in arr2: combined_arr.append(i)

或使用列表理解:

arr2 = tup[0]
combined_arr = [i for i in arr if i in arr2]

numpy 样式与 intersect1d() 正如@Barmar 指出的那样:

import numpy as np

...

arr2 = tup[0]
combined_arr = np.intersect1d(arr, arr2)

这应该有效 -

arr = [1,2,3,4,5,6,7,8,9,10]
tup = (32,5,4,6,90,45)

combined_arr = []
for i in arr:
    for t in tup:
        if i == t:
            #do this..
            #combine them into one arry 
            combined_arr.append(i)


print(combined_arr) # gives [4, 5, 6]

在我看来,最 pythonic 的方法是使用 zip,首先压缩两个序列。这避免了任何超出范围的错误。 例如,对于列表理解,它看起来像这样:

arr = [1, 2, 3, 4, 5, 60, 7]
tup = (10, 20, 30, 40, 50, 60, 7, 80, 90)
[arr_elem for arr_elem, tup_elem in (zip(arr, tup)) if arr_elem == tup_elem]

这将输出列表

[60, 7]