numpy在多列上检查两个数组

时间:2018-11-22 14:54:50

标签: python numpy

让我们说edata和tdata两个具有形状(x,6)和(y,6)的2D numpy数组,其中x和y是两个任意数字,并且不能相等。现在,我必须检查edata中是否有任何行,以使该行的第2列和第3列值都等于tdata的某行的值。如果有任何这样的行,则将其保存在另一行中。现在,我已经编写了以下代码。但是我认为numpy可以更好地实现这一点,而不是显式地迭代和检查值。你能建议我更有效的方法吗?

tsconfig.json

1 个答案:

答案 0 :(得分:1)

您可以使用equalouter来查看edata列中是否有任何值在tdata列中。您检查第二列和第三列,然后在any上使用axis=1来获取edata行,例如:

res = edata[ (np.equal.outer(edata[:,1],tdata[:,1])
              &np.equal.outer(edata[:,2],tdata[:,2])).any(1) ,:]

例如,只需简单输入:

edata = np.arange(4*6).reshape(4,6)
tdata = np.arange(6*6).reshape(6,6) + 12

print (res)
array([[12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

edata行的最后两行在第2列和第3列中的值与tdata的前两行相同