[英]Fastest way to create list from map object
我有一些代碼:
map_ret = map(lambda x: x*x, Array)
其中Array
是一些帶有浮點數的 numpy 數組。
map_ret
是一個地圖對象。
我想從map_ret
獲取列表。
result = list(map_ret)
但是當我的數組包含更多 1000000 個數字時,它變得很慢。
如何更快地從地圖對象獲取值?
您可以將您的函數應用於輸入本身,從而完全繞過map()
。 在我的機器上,這種方法大約是。 對於大小為1_000_000
輸入,比map()
快 2 個數量級。 盡管如此,如果你真的需要一個列表作為輸出,你可以使用.tolist()
到結果np.ndarray()
,這仍然是大約。 比map()
快 1 個數量級。
import numpy as np
arr = np.arange(1000000).astype(float)
def my_func(x):
return x * x
%timeit list(map(my_func, arr))
# 203 ms ± 3.25 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit my_func(arr)
# 1.6 ms ± 24.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit my_func(arr).tolist()
# 33.8 ms ± 471 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
只是為了評論 NumPy 數組上的“不使用map()
”。 如果輸入不是 NumPy 數組,而是一個列表,例如:
list_ = [float(x) for x in range(1000000)]
%timeit list(map(my_func, list_))
# 114 ms ± 1.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit my_func(np.array(list_)).tolist()
# 64.4 ms ± 382 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
map()
方法在 NumPy 的數組上肯定比在列表上慢,最終來回遍歷 NumPy 仍然是大約。 直接在列表上比map()
快兩倍。 這就是為什么您收到一些反對在 NumPy 對象上使用map()
評論的原因,因為 NumPy 通常為典型的map()
用例提供更快的替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.