2017-09-04 28 views
0

2つの配列を持っているので、次元は同じですが長さは異なります。異なるサイズの2つの配列を比較する - python numpy

ARR1 = np.array([インジケータInd1]、[Ind2及び]、[IND3]])

ARR2 = np.array([Ind7]、[IND3]、[IND3]、[Ind4] ])

同じ位置を持ち、両方の配列が等しい要素の位置と値を取得する必要があります。

例の場合、予想される答えは次のようになります。= 2

位置= IND3

私はnumpyのモジュールでのpythonを使用しています。リストを想定し

+0

長い方の配列と同じ長さになるように小さい方の配列をパディングし、もう一方を引くと、np.where((Arr1-Arr 2)== 0)。 – anki

+0

マッチは1つしかありませんか?あなたはすべての試合、または最初の試合だけをしたいですか? –

答えて

1

NumPy配列では、パフォーマンスを向上させるためにベクトル化して作業し、配列スライスを使用することもできます。

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 

これは、複数の一致の世話をする - ことを念頭に置いて、ここに入力配列abのための1つのアプローチがあります。

サンプル実行 - インデックスとその値のための出力としてタプルのリストについては

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

関連する問題