2017-09-04 75 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