>>> d = dict(zip(np.random.randint(1, 10, 1_000_000).cumsum(), np.arange(1_000_000.)))
>>> out = np.zeros(10_000_000)
定义fromiter方法
>>> def use_iter():
... k, v = (np.fromiter(w, dtype=t, count=len(d)) for w, t in [(d.keys(), int), (d.values(), float)])
... out[k] = v
... return out
和list方法供参考
>>> def use_list():
... out[list(d.keys())] = list(d.values())
... return out
k = np.random.randint(1, 100000, 10000)
v = np.random.rand(10000)
d = dict(zip(k, v))
In [119]: %%timeit
...: out = np.zeros(100000)
...: out[list(d.keys())] = list(d.values())
...:
...:
1.86 ms ± 13.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [120]: %timeit [d.get(i, 0) for i in range(100000)]
17.4 ms ± 231 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [121]: %timeit pd.Series(d).reindex(range(100000),fill_value=0).tolist()
9.77 ms ± 148 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
对于较大的数据集,可以直接在键和值迭代器上使用
np.fromiter
,而不是先创建列表,从而获得一定的速度。你知道吗创建测试用例
定义
fromiter
方法和
list
方法供参考给他们计时
同时,检查正确性
既然您标记了
pandas
,那么来自reindex
的解决方案使用
numpy
和numpy
索引将是最有效的解决方案:性能因为您要求:
相关问题 更多 >
编程相关推荐