Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图提高迭代Python程序的效率_Python_Iteration - Fatal编程技术网

试图提高迭代Python程序的效率

试图提高迭代Python程序的效率,python,iteration,Python,Iteration,早上好,如果这是一个模糊的问题,我很抱歉。我会尽可能地描述 基本上,我使用Python代码对空气扩散模型的结果进行后处理,以测试不同的场景。我使用Python,因为它可以在几秒钟内迭代结果,而分散软件需要几个小时。我的问题是,代码仍然需要数周的时间来运行我所有的场景,我想知道这是否是由于糟糕的编程造成的。我不会把整个代码放在这里,因为如果它不相关的话,很多代码都会放在这里,但是我会完成我正在采取的步骤。首先,这里是我问题的概要: 我有17个来源同时行动 每个源可以有四个不同的排放率,这与另一个

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

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

  • 我有17个来源同时行动
  • 每个源可以有四个不同的排放率,这与另一个源无关。即,源#1可以具有排放率a、b、c或d。来源2-17也是如此
  • 每个源可以采用两种状态中的一种。我们称之为工作或不工作,但在这两个州都有排放率。但是,只有5个源可以同时工作。这很重要
总之,每个源的排放量是四种排放率以及两种状态的函数。因此,每个污染源都有8种可能的排放情景,所有17种污染源一次都可能处于这些情景中的任何一种。相当多的排列

下面是我目前计算结果的方式。我想知道每种状态组合的最大结果是什么。如果您熟悉空气扩散建模,我已经根据1g/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知识有限,希望能够在更改变量等时更频繁地运行它


提前谢谢你

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


为什么要将
itertools.compositions
的结果变成一个列表?在那种情况下,发电机就足够了。
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]