2017-09-04 927 views
0

所以我有两个数组,它们具有相同的维度但长度不同。比较两个不同大小的数组 - python numpy

ARR1 = np.array([[IND1],[IND2],[IND3]])

ARR2 = np.array([[IND7],[IND3],[IND3],[IND4] ])

我需要获取具有相同位置的元素的位置和值,并且在两个数组中都相等。

在该示例情况下,预期的答案将是:

位置= 2

值= IND3

我使用蟒与numpy的模块。

+0

将较小的数组填充为与较长的数组一样长,然后减去另一个数组,然后用np.where((Arr1-Arr 2)== 0)。 – anki

+0

只会有一场比赛吗?你想要所有的比赛,还是只是第一场比赛? –

回答

1

对于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} 
+0

谢谢你完美的作品:) – CardCaptor

1

假设列表被称为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

+0

我会修改这个返回元素和位置的列表 – CardCaptor