2017-08-10 65 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])`