【问题标题】:Python initializing several arrays with output of loopsPython用循环的输出初始化几个数组
【发布时间】:2021-03-11 15:17:58
【问题描述】:

所以我是 python 的相对新手(使用 Python 3 和 Spyder IDE 3.8)。 我有以下主要计算文件,其中几个函数聚集在一起并循环通过。现在我正在尝试使用等级函数评估 spray_pressure、spray_angle 和particle_size 的单个值是否在给定的边界内。如果不是 0,则进入新数组,如果是,则实际值存储在新数组中。 所以我想将所有输出存储在 4 个新的数组 spray_pressure、spray_angle、particle_size 和 massflow 中。但我现在不知道如何初始化它们并正确存储值。 如您所见,该脚本的输出应该是 4 个数组 spray_pressure、spray_angle、particle_size 和 massflow,每个数组的大小为 [105, 35],以便可以基于这些数组进行进一步的绘图和计算。

我试过np.array(len(no_düsenkombination ), len(no_hours_Process) 但这不起作用,因为我需要一个 [105x35] 数组,而 np.array 似乎限制为 32 个条目。如果有人知道一个好的解决方案,我将不胜感激。我一整天都在想办法。


from calc_particlesize import calc_particlesize
from calc_sprayangle import calc_sprayangle
from calc_spraypressure import calc_spraypressure
from evaluation import evaluation

def calc_processfactor(df_düsenkombinationen, mk, process_duration, df_rezeptur, recipe_nr):
        
    number_of_nozzles = 6
    k = 0 #increment mass flow kondensat
    index_Zero = 0
    grade = 0
    mkmax = mk/(number_of_nozzles*3600)
    
    no_düsenkombination = 105

    no_hours_Process = 35
    
    delta_massKondensat = 0
        
    for i in range(no_düsenkombination):
        for j in range(no_hours_Process):
             
            # deltamk[index_Zero,j] = mkmax[j,index_Zero]/100
            
            massflow = np.zeros(len(no_düsenkombination), len(no_hours_Process))
            delta_massKondensat = mkmax/100
            mk = mkmax 
            
            while grade != 1 and mk > 0:
               
                mk = mkmax-k*delta_massKondensat                                       #mass kondensat max ist reduziert bis grade                                                     #oder mk = 0 ist
                spray_pressure = calc_spraypressure(mk,df_düsenkombinationen.iloc[0:5,i:i+1])                                                #Berechnung des Sprühdruckes
                spray_pressure_eff = spray_pressure
                spray_angle = calc_sprayangle(spray_pressure, df_rezeptur, recipe_nr, df_düsenkombinationen)                         #Berechnung des Sprüwinkels
                spray_angle_eff = spray_angle
                particle_size = calc_particlesize(spray_pressure,spray_angle, mk, recipe_nr, df_rezeptur, df_düsenkombinationen)      #Berechnung der Partikelgrösse
                particle_size_eff = particle_size
                grade = evaluation(spray_pressure,spray_angle,particle_size)                                  #Bewertung der Prozessgrössen
                k = k+1

            if grade == 0:
                spray_pressure[i,j] = 0         #INTIIALISIEREN      #Matrix mit Sprühdruck, Zeile: Kombiantionen, Spalte: Stunden
                spray_angle[i,j]= 0          #Matrix mit Sprühwinkel, Zeile: Kombiantionen, Spalte: Stunden
                particle_size[i,j]= 0        #Matrix mit Partikelgrösse, Zeile: Kombiantionen, Spalte: Stunden
                massflow[i,j]= 0            #Matrix mit Konzentratmassenstrom, Zeile: Kombiantionen, Spalte: Stunden
            else:
                spray_pressure[i,j] =  spray_pressure_eff
                spray_angle[i,j]= spray_angle_eff
                particle_size[i,j] = particle_size_eff
                massflow[i,j] = mk*6*3600
                grade = 0                      #Reset von grade

        
    return(spray_pressure, spray_angle, particle_size, massflow)```

【问题讨论】:

    标签: python arrays numpy indexing


    【解决方案1】:

    np.array 唯一真正的大小限制是您可用的内存量。尽管您的代码中可能存在其他错误,但我怀疑问题是:

    np.zeros(len(no_düsenkombination), len(no_hours_Process))
    

    应该是:

    np.zeros([no_düsenkombination, no_hours_Process])
    

    得到一个 105x35 的零矩阵。

    【讨论】:

    • 如果我这样做,python 会给我“TypeError:'int' 类型的对象没有 len()”
    • 编辑了代码。我读得更高,发现这些变量只是整数,所以你不想要任何东西的长度。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2020-12-25
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多