比较两个具有不同大小python numpy的数组

2024-09-25 00:27:25 发布

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

所以我有两个数组,它们有相同的维数但长度不同。

Arr1=np.数组([[Ind1],[Ind2],[Ind3]])

Arr2=np.数组([[Ind7],[Ind3],[Ind3],[Ind4]])

我需要得到在两个数组中具有相同位置且相等的元素的位置和值。

在本例中,预期的答案是:

位置=2

值=Ind3

我将python与numpy模块一起使用。


Tags: 模块答案numpy元素np数组本例维数
3条回答

也可以使用intersect1d获取相同的值:

np.intersect1d(a,b)

对于NumPy数组,您可能希望以矢量化的方式工作以提高性能,并使用数组切片。有鉴于此,这里有一种输入数组的方法ab-

n = min(len(a), len(b))
out_idx = np.flatnonzero(a[:n] == b[:n])
out_val = a[out_idx] # or b[out_idx] both work

这会处理多个匹配项。

样本运行-

In [224]: a = np.array([3, 8, 9, 2, 1, 7])

In [225]: b = np.array([1, 2, 9, 7, 5, 7, 0, 4])

In [226]: n = min(len(a), len(b))
     ...: out_idx = np.flatnonzero(a[:n] == b[:n])
     ...: out_val = a[out_idx]
     ...: 

In [227]: out_idx
Out[227]: array([2, 5])

In [228]: out_val
Out[228]: array([9, 7])

对于作为索引输出的元组列表及其值-

In [229]: zip(out_idx, out_val)
Out[229]: [(2, 9), (5, 7)]

对于索引和相应值的漂亮字典输出-

In [230]: {i:j for i,j in zip(out_idx, out_val)}
Out[230]: {2: 9, 5: 7}

假设这些列表被称为lst_1lst_2,您可以执行如下操作

for i in range(min(len(lst_1), len(lst_2)):
    if lst_1[i] == lst_2[i]:
        return lst_1[i], i

这将返回一个包含公共元素及其索引的元组。注意,如果有多个匹配项,则返回第一个匹配项;如果不存在匹配项,则返回None

相关问题 更多 >