gpt4 book ai didi

python - 使用 NumPy 索引数组对 Python 列表进行切片——任何快速的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:34 25 4
gpt4 key购买 nike

我有一个名为 a 的常规 list 和一个索引 b 的 NumPy 数组。
(不,我不可能将 a 转换为 NumPy 数组。)

有什么方法可以有效地达到与“a[b]”相同的效果吗?需要明确的是,这意味着我不想提取 b 中的每个单独的 int,因为它会影响性能。

(是的,这是我代码中的一个瓶颈。这就是我开始使用 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() 胜出,至少对于这些数量级的输入大小而言。

关于python - 使用 NumPy 索引数组对 Python 列表进行切片——任何快速的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38679666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com