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

比较两个大小不同的数组-python numpy,python,arrays,numpy,compare,Python,Arrays,Numpy,Compare,我有两个数组,它们的维数相同,但长度不同 Arr1=np.数组([[Ind1]、[Ind2]、[Ind3]] Arr2=np.数组([[Ind7]、[Ind3]、[Ind3]、[Ind4]] 我需要得到两个数组中位置相同且相等的元素的位置和值 在本例中,预期答案为: 位置=2 值=Ind3 我将python与numpy模块一起使用 假设列表名为lst_1和lst_2,您可以执行以下操作 for i in range(min(len(lst_1), len(lst_2)): if lst_

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

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

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

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

在本例中,预期答案为:

位置=2

值=Ind3


我将python与numpy模块一起使用

假设列表名为
lst_1
lst_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

对于NumPy数组,您可能希望以矢量化的方式工作以提高性能,并利用数组切片。考虑到这一点,这里有一种方法用于输入数组
a
b
-

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}

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

np.intersect1d(a,b)

当我试图比较两个不同大小的数组时,我遇到了同样的问题。我只是将它们转换为列表,现在它不会抛出任何警告/错误

我用于将数组转换为列表的代码是-

import numpy as np
np.array([[1,2,3],[4,5,6]]).tolist()

将较小的数组填充为与较长的数组一样长,然后从另一个数组中减去一个数组,然后用np查找。其中((Arr1-Arr2)==0)。是否只有一个匹配?您想要所有匹配,还是只想要第一个匹配?我将对此进行修改,以返回元素和位置的列表