快速过滤大量类似numpy的数组

问题描述 投票:1回答:1

我让代码解释我想做的事情-我认为这很简单:

import numpy as np

arr1 = (1e5 * np.random.rand(int(1e4))).astype(int)
arr2 = (1e5 * np.random.rand(int(1e3))).astype(int)
arr3 = np.random.rand(int(1e4))

maskFn = lambda val: val in arr2
maskArr = np.vectorize(maskFn)(arr1)

outArr = arr3[maskArr]

我的解决方案适用于少量数据,但是我现在正在处理非常庞大的数组,而我的业余代码方面的滞后是压倒性的。一个基于磁盘的解决方案也可以最大程度地减少内存开销,这也很好-我还没有内存限制,但是我希望很快...

任何帮助都将成为[[super感谢!

python numpy
1个回答
1
投票
np.isin。它的速度快了几个数量级,更重要的是,它可以通过非常大的阵列进行适当缩放。解决方案示例:

import numpy as np arr1 = (1e5 * np.random.rand(int(1e4))).astype(int) arr2 = (1e5 * np.random.rand(int(1e3))).astype(int) arr3 = np.random.rand(int(1e4)) maskArr = np.isin(arr1, arr2) outArr = arr3[maskArr]

如果数组值是唯一的(例如字典键),这甚至更快:您可以在assume_unique = True中标记np.isin,并且使用更有效的算法。 (当然,这里提供的示例数组不是唯一的,但实际数据集中的数组是唯一的。)

感谢那些回答了我第一个Stack Overflow代码问题的人!您的有用提示使我朝着正确的方向前进。确实,只是“大声”解释我的问题,对我有很大帮助。
© www.soinside.com 2019 - 2024. All rights reserved.