让我们说edata和tdata两个具有形状(x,6)和(y,6)的2D numpy数组,其中x和y是两个任意数字,并且不能相等。现在,我必须检查edata中是否有任何行,以使该行的第2列和第3列值都等于tdata的某行的值。如果有任何这样的行,则将其保存在另一行中。现在,我已经编写了以下代码。但是我认为numpy可以更好地实现这一点,而不是显式地迭代和检查值。你能建议我更有效的方法吗?
tsconfig.json
答案 0 :(得分:1)
您可以使用equal
和outer
来查看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
的前两行相同