簡體   English   中英

從地圖對象創建列表的最快方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM