我使用下面的行来查找b
的行是否在a
a[np.all(np.isin(a[:, 0:3], b[:, 0:3]), axis=1), 3]
数组沿着axis=1
有更多的条目,我只比较前3个条目并返回a
的第四个条目(idx=3)
我意识到的可能错误是,没有考虑条目的顺序。因此,下面是a
和b
的示例:
a = np.array([[...],
[1, 2, 3, 1000],
[2, 1, 3, 2000],
[...]])
b = np.array([[1, 2, 3]])
将返回[1000, 2000]
,而不是只返回[1000]
对于较小的
b
(小于100行),请尝试以下方法:例如:
说明:
关键是将
a
的所有行(前3列)的相等性测试“分发”到b
的所有行:请注意,这可能很大:形状为
(len(b), len(a), 3)
然后,第一个
.all(axis=-1)
表示我们希望所有整行都匹配:最后一位
.any(axis=0)
表示:“匹配b
中的任何行”:即:“
a[2, :3]
匹配b
的一些行以及a[3, :3]
”最后,将其用作
a
中的掩码,并取第3列性能说明
上述技术将a行与b行的乘积相等。如果
a
和b
都有许多行,那么这可能会很慢,并且会占用大量内存或者,您可以在纯Python中使用
set
成员身份(不需要调用者可以完成的列子集):当
b
的行数超过50~100行时,与上面作为函数编写的np
版本相比,这可能更快:相关问题 更多 >
编程相关推荐