2017-08-10 16 views
-1

私はプログラミングに新しいですし、質問がありました。私は2つのnumpyの配列だった場合:異なる配列の列を比較するためにnumpy配列を反復する

A = np.array([[1,0,3], [2,6,5], [3,4,1],[4,3,2],[5,7,9]], dtype=np.int64) 
B = np.array([[3,4,5],[6,7,9],[1,0,3],[4,5,6]], dtype=np.int64) 

を、私は、配列Bの最後の2列に配列Aの最後の2つの列を比較したいし、新しい配列にそれらが等しい場合、出力行全体。したがって、これら2つの配列の出力は次のようになります。

[1,0,3 
1,0,3 
5,7,9 
6,7,9] 

最初の要素は最後の2行で一致していなくても、最後の二つの要素がないため。

ここまでは私のコードですが、それは動作していません。誰も私にいくつかのヒントを与えることができますか

column_two_A = A[:,1] 
column_two_B = B[:,1] 

column_three_A = A[:,2] 
column_three_B = B[:,2] 

column_four_A = A[:,3] 
column_four_B = B[:,3] 

times = A[:,0] 

for elementA in column_three_A: 
    for elementB in column_three_B: 
     if elementA == elementB: 
      continue 
     for elementC in column_two_A: 
      for elementD in column_two_B: 
       if elementC == elementD: 
        continue 
       for elementE in column_four_A: 
        for elementF in column_four_B: 
         if elementE == elementF: 
          continue 
         element.append(time) 
print(element) 
+0

あなたはAの各行とBの各行を比較し、両方の行の最後の2つの要素が同じ場合に両方を返すことを意味していますか?また、あなたのコードは理解できません。私たちは少なくともそれを読むことができるように、正しくフォーマットしてください。 – jadsq

+0

明らかにするには、両方の配列の行を新しい配列に追加する必要がありますか?あなたの例のように、配列の長さが同じか、長さが変わっていますか? – BenT

+0

はい、両方の行を追加する必要があります。配列は同じ長さではありません。これは私が苦労していたものです。 –

答えて

1

Numpyは、この種のタスクに多くの機能を備えています。 Aの値がB.にあるかどうかを調べる解決策は、print()ステートメントを追加して、chkchk2、およびxが何であるかを確認するソリューションです。

import numpy as np 
A = np.array([[1,0,3], [2,6,5], [3,4,1],[4,3,2],[5,7,9]], dtype=np.int64) 
B = np.array([[3,4,5],[6,7,9],[1,0,3],[4,5,6]], dtype=np.int64) 

c = [] 

for k in A: 

    chk = np.equal(k[-2:], B[:, -2:]) 
    chk2 = np.all(chk, axis=1) 
    x = (B[chk2, :]) 
    if x.size: 
     c.append(x) 

print(c) 
+0

ありがとうございます!これは完全に機能します。 –

0

私は一晩中滞在していると思っています...ありがとう!

`for i in range(len(A)): 
    for j in range(len(B)): 
     if A[i][1] == B[j][1]: 
      if A[i][2] == B[j][2]: 
       print(B[j]) 
       print(A[i])` 
関連する問題