【发布时间】:2014-03-20 10:34:30
【问题描述】:
我有一小段代码用于填充整数列表。我需要改进它的性能,也许将整个东西转换成numpy 数组,但我不确定如何。
这是MWE:
import numpy as np
# List filled with integers.
a = np.random.randint(0,100,1000)
N = 10
b = [[] for _ in range(N-1)]
for indx,integ in enumerate(a):
if 0<elem<N:
b[integ-1].append(indx)
这就是它的作用:
- 对于
a中的每个整数 (integ) - 查看它是否位于给定范围
(0,N)之间 - 如果是,则将其索引存储在
b的子列表中,其中所述子列表的索引是原始整数减1 (integ-1)
这段代码运行得很快,但我的实际代码使用了更大的列表,因此需要提高其性能。
【问题讨论】:
-
请说明你想做什么。您的代码看起来应该是一种更直接的方式来完成您想要实现的目标。
-
您可能需要生成器或 itertools。但我同意@Carsten。解释你的目标是什么。顺便说一句 b 可能是 defaultdict(list)
-
只是为了好玩,排序逻辑的单行是
b = [np.where(a == i) for i in range(1, N)]。 -
@Carsten 我可以解释这个块的用途,但需要几页。这是一小块隐藏在我正在处理的更大(数千行)代码中的代码块,它做了一件非常小的事情。这就是为什么我忽略了所有会使它不必要地复杂化的东西,并尽可能简单地发布它。有关更多上下文,我来自这个问题stackoverflow.com/questions/21856907/…,我现在正在尝试提高 Add 2 中提到的函数的性能。
-
@Carsten 该死的错过了那条线,但可能会在 np.where 上添加一个 [0] 吗?
标签: python arrays performance list numpy