2017-08-10 87 views
-1

我是編程的新手,有一個問題。如果我有兩個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) 

我想數組A的最後兩列比較陣列B的最後兩列,然後如果他們是平等的,輸出整個行到一個新的數組。所以,這兩個陣列的輸出將是:

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

因爲即使第一個元素不匹配的最後兩行,最後兩個元素做。

這是我的代碼到目前爲止,但它甚至不接近工作。任何人都可以給我一些提示嗎?

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中的每一行,並且當兩行中最後兩個元素相同時返回兩者?此外,您的代碼無法識別,請嘗試正確格式化,以便我們至少可以讀取它。 – jadsq

+0

所以要清楚,你想要兩個數組的行附加到新的數組?在你的例子中是長度相等還是長度不同的數組? – BenT

+0

是的,我想要追加兩行。陣列長度不一樣,這是我一直在努力...幫助將不勝感激。 –

回答

1

numpy爲這類任務保存許多功能。這裏有一個解決方案來檢查A的值是否在B.添加print()陳述並檢查chk,chk2x是什麼。

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])`