我有一个常规的list
called a
,以及一个 NumPy 索引数组b
.
(不,我不可能转换a
到 NumPy 数组。)
有什么方法可以达到与“相同的效果”a[b]
“有效?需要明确的是,这意味着我不想提取每个人int
in b
由于其性能影响。
(是的,这是我的代码中的瓶颈。这就是我首先使用 NumPy 数组的原因。)
a = list(range(1000000))
b = np.random.randint(0, len(a), 10000)
%timeit np.array(a)[b]
10 loops, best of 3: 84.8 ms per loop
%timeit [a[x] for x in b]
100 loops, best of 3: 2.93 ms per loop
%timeit operator.itemgetter(*b)(a)
1000 loops, best of 3: 1.86 ms per loop
%timeit np.take(a, b)
10 loops, best of 3: 91.3 ms per loop
我对numpy.take()
但这远非最佳。我也尝试了一些 Numba 解决方案,它们的时间相似——大约 92 毫秒。
因此,简单的列表理解与这里的最佳理解相去不远,但是operator.itemgetter()
获胜,至少对于这些数量级的输入大小而言。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)