簡體   English   中英

從浮點數數組構建列表的更快方法

[英]Faster way to build list from array of floats

我是python的新手,正在嘗試生成數組元素所有可能組合的列表。 這是我的嘗試:

Ks = (np.arange(Low_Lim[2], (High_Lim[2]+1)) * grid_space + OFFSETS[2])

Js = (np.arange(Low_Lim[1], (High_Lim[1]+1)) * grid_space + OFFSETS[1])

Is = (np.arange(Low_Lim[0], (High_Lim[0]+1)) * grid_space + OFFSETS[0])

Points = [(a, b, c) for a in Is for b in Js for c in Ks]

但這花費的時間比我想要的要長。 有沒有比我這里更快的方法? 看起來像是itertools.combination的可能性嗎?

這應該給你同樣的結果

list(itertools.product(Is, Js, Ks))

根據您希望使用列表的方式,您可能會或可能不考慮使用生成器,從而不必預先支付計算成本。

from timeit import Timer
setup_1 = """
Is = range(1000)
Js = range(300)
Ks = range(100)
"""
exec_1 = """
[(a, b, c) for a in Is for b in Js for c in Ks]
"""
exec_2 = """
list(itertools.product(Is, Js, Ks))
"""
t_1 = Timer(exec_1, setup_1)
print("Regular list comprehension/Regular loop: %r" % t_1.timeit(1))
t_2 = Timer(exec_2, setup_1)
print("Itertools.product/Regular loop: %r" % t_2.timeit(1))

setup_2 = """
Is = (i for i in range(1000))
Js = (i for i in range(300))
Ks = (i for i in range(100))
"""

t_3 = Timer(exec_1, setup_2)
print("Regular list comprehension/Generator: %r" % t_3.timeit(1))
t_4 = Timer(exec_2, setup_2)
print("Itertools.product/Generator: %r" % t_4.timeit(1))

運行上面的代碼為我提供了以下計算/運行時間。 請注意,itertools評估了生成器。

Regular list comprehension/Regular loop: 3.8275507260113955
Itertools.product/Regular loop: 2.764477888995316
Regular list comprehension/Generator: 0.00015614699805155396
Itertools.product/Generator: 2.8045845669985283

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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