如何解决在numpy数组的多个列上使用多个过滤器-更有效的方法?
我有以下2个数组:
arr = np.array([[1,2,3,4],[5,6,7,8],[7,5,3],[2,4,8,9]]
ids = np.array([6,8])
数组arr
中的每一行都描述了一个4位数的ID,没有冗余ID,无论是其值还是其组合。因此,如果[1,4]
存在,那么这4位数字的其他组合将不存在。一秒钟之内,这很重要。
数组ids
包含4位数字的ID,但是顺序可能不正确。现在,我需要遍历arr
的每一行,并查看此ID是否存在。在此示例中,ids
适合于arr
顶部的第二行。所以arr[1,:]
。
我当前的解决方案为每列创建一个过滤器,以检查ids
的值是否存在于4列中的任何一列中。之后,我在arr
上使用了这些过滤器。这似乎太复杂了。
所以我几乎是这样做的:
filter_1 = np.in1d(arr[:,0],ids)
filter_2 = np.in1d(arr[:,1],ids)
filter_3 = np.in1d(arr[:,2],ids)
filter_4 = np.in1d(arr[:,ids)
result = arr[filter_1 & filter_2 & filter_3 & filter_4]
有人知道更简单的解决方案吗?也许使用发电机?
解决方法
在arr
和all
的整个减少范围内使用np.isin
-得到result
-
In [15]: arr[np.isin(arr,ids).all(1)]
Out[15]: array([[5,6,7,8]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。