![](/img/trans.png)
[英]What is the fastest way in python to build a c array from a list of tuples of floats?
[英]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.