两个numpy ndarrays的公共元素
Common elements of two numpy ndarrays
我有一个名为 arr
且形状为 (200,) 的 numpy
ndarray
和一个元组 tup
包含另一个 ndarray
且形状为 (ndarray( 150,))。我想创建一个新数组,只包含 ndarray
s.
共有的元素
从元组中取出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]
我有一个名为 arr
且形状为 (200,) 的 numpy
ndarray
和一个元组 tup
包含另一个 ndarray
且形状为 (ndarray( 150,))。我想创建一个新数组,只包含 ndarray
s.
从元组中取出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]