gpt4 book ai didi

python - 尝试提高迭代Python程序的效率

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:40 25 4
gpt4 key购买 nike

早上好,很抱歉,如果这是一个模糊的问题。我会尽量描述性强。

基本上,我使用 Python 代码对空气扩散模型的结果进行后处理,以测试不同的场景。我正在使用 Python,因为它可以在几秒钟内迭代结果,而分散软件需要几个小时。我的问题是代码仍然需要数周时间才能运行我所有的场景,我想知道这是否是由于编程不当造成的。我不会把整个代码放在这里,如果它不相关的话,我会放很多,但我会完成我正在采取的步骤。首先,这是我的问题的概述:

  • 我有 17 个来源同时行动
  • 每个来源可以有四种不同的排放率,它们独立于其他来源。 IE。源 #1 的发射率可以是 a、b、c 或 d。来源 #2-#17 也可以。
  • 每个来源都可以采用两种状态之一。我们称它们工作或不工作,但在这两个州都有一个排放率。但是,只有 5 个来源可以同时工作。这很重要。

总而言之,每个来源的排放量是四种排放率以及两种状态的函数。所以每个源都有 8 种可能的排放情景,所有 17 个源可能同时处于这些情景中的任何一种。相当多的排列!

这是我目前计算结果的方式。我想知道每个状态组合的最大结果是什么。如果您熟悉空气扩散模型,我已经根据 1 g/s 的排放率计算了结果,因此我可以按上述排放率缩放结果。

代码:

sources = ['1','2',...'17']   
emission_rates = ['a','b','c','d']
Source_1_results = [list of values of length x] ## NOTE THAT x is VERY LONG. THESE ARE HUGE ARRAYS (400,000 values)
Source_2_result = [list of values of length x]
.
.
Source_17_results = [list of values of length x]

working_sources = list(itertools.combinations(sources, 5))
source_emission_rate = list(itertools.combinations_with_replacement(emission_rates, 17))

for e in source_emission_rate:
for w in working_sources:
temp_results = []
for num, source in enumerate(sources):
temp_results[num] = [Source_x_result * e * w] ##THIS LINE INVOLVES SOME LOOKUP IN MY CODE TO REFERENCE THE ACTUAL RESULTS AND EMISSIONS ETC.

如果代码不够,我很抱歉。我可以发布完整的代码,但同样,在大多数情况下,它只是分配变量等。

我的问题是:有没有更快的方法来遍历所有可能的状态?我的代码目前可以运行,但我的 Python 知识有限,希望能够在更改变量等时更频繁地运行它。

提前致谢!

最佳答案

这应该稍微快一点(中间列表更少 + 列表理解)

working_sources = itertools.combinations(sources, 5)
source_emission_rate = itertools.combinations_with_replacement(emission_rates, 17)

for e in source_emission_rate:
for w in working_sources:
temp_results = [source * e * w for source in sources]

关于python - 尝试提高迭代Python程序的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com