-1

我有这段代码,我必须在其中处理 2 个不同数组的值,一个来自真实数据,一个来自理论计算:

#import sys
import datetime
import time
#import numpy as np
from pysolar.solar import * \
# dati di input
#posizione geografica
latitudine = 43.8016626
longitudine = 11.2558136
# per sapere l'area captante mi serve la larghezza  [m]
pannello_mis_larghezza = 0.23
# per sapere l'area captante mi serve la lunghezza  [m]
pannello_mis_lunghezza = 1.970


# per calcolare ombra all'interno di una parabola devo sapere l'altezza
parabola_altezza_ombra = 0.16
#posizione superficie
#inclinazione rispetto al piano in gradi, TILT
pannello_tilt = 12
pannello_tilt_radianti = math.radians(pannello_tilt) #conversione in radiati le funzioni math. richiedono radianti

#angolo orientmento azimuth rispetto a sud , negativo verso ovest positivo verso est
pannello_azimuth = 0
pannello_azimuth_radianti = math.radians(pannello_azimuth)

#il pannello può avere un limite di rotazione per motivi costruttivi funzionali
pannello_limite_rotazione = 45
# per studio su minuti
range_studio_minuti = 1440

#per studi con secondi
range_studio_secondi = 86400

#si apre il file lamma per i risultati reali

file_lamma = open("/Users/costanzanaldi/Desktop/POLO_SCIENTIFICO_(LAMMA).txt",'r')
#Il comando split non può essere dato su un'intera lista di stringhe ma solo su una
#singola stringa, quindi si inserisce la variabile type per scandire tutte le stringhe
#creo due variabili iiii e tttt per inizializzare i cicli for
iiii = -1
tttt = -1
flusso_diretto_medio_W_mq_array = []
flusso_diretto_medio_W_mq_array_anno = []
for line in file_lamma:

    iiii= iiii+1        
    Type = line.split(" ")
    data_ = Type[0]
    orario_ = Type[1]
    radiazione_globale = Type[2]
    radiazione_diffusa = Type[3]
    #ora devo dividere la data in giorno, mese e anno e l'orario in ore e minuti
    giorno1, mese1, anno1 = data_.split("/")
    ora1, minuto1, secondo1 = orario_.split(":")

    anno_ = int(anno1)
    mese_ = int(mese1)
    giorno_= int(giorno1)
    ora_ = int(ora1)
    minuto_ = int(minuto1)

    d_ = datetime.datetime(anno_, mese_, giorno_, ora_, minuto_)

    energia_su_metro_quadro_globale_int=int(radiazione_globale)
    energia_su_metro_quadro_diffusa_int=int(radiazione_diffusa)

        #si crea un array per le potenze medie e si usa append per i problemi legati al floating

    flusso_diretto_medio_W_mq = (energia_su_metro_quadro_globale_int - energia_su_metro_quadro_diffusa_int)/(60*15)
    if flusso_diretto_medio_W_mq < 0:
        flusso_diretto_medio_W_mq = 0.0
    flusso_diretto_medio_W_mq_array.append(flusso_diretto_medio_W_mq)
    for conta in range(15):
        tttt = tttt +1
        flusso_diretto_medio_W_mq_array_anno.append(flusso_diretto_medio_W_mq)

file_lamma.close()


aaaa=-1
bbbb=-1
anno_array = []
k_array = []
#creo una lista dove avrò le date e gli orari di tutto l'anno 2014
data = datetime.datetime(2014, 1, 1, 0, 0)
#con la funzione timedelta incremento la data del 1 gennaio 2014 a mezzanotte
#di un minuto fino ad arrivare al 31 dicembre 2014 alle 23 e 59 (ho così un range di
#525600 minuti in un anno)
for i in range(0,525599):
    data += datetime.timedelta(minutes=1)
    data_stringa = data.strftime("%Y-%m-%d %H:%M:%S")
    anno_array.append(data_stringa)
    flusso_diretto_medio_teorico_W_mq_array = []
    flusso_diretto_medio_teorico_W_mq_array_anno = []
    aaaa=aaaa+1
    for line2 in anno_array:
        Type2=line2.split(" ")
        data_2 = Type2[0]
        orario_2 = Type2[1]
        #ora devo dividere la data in giorno, mese e anno e l'orario in ore e minuti
        anno2, mese2, giorno2 = data_2.split("-")
        ora2, minuto2, secondo2 = orario_2.split(":")
        anno_2 = int(anno2)
        mese_2 = int(mese2)
        giorno_2 = int(giorno2)
        ora_2 = int(ora2)
        minuto_2 = int(minuto2)

        d_2 = datetime.datetime(anno_2, mese_2, giorno_2, ora_2, minuto_2)

#calcolo elevazione sole - altitude
        sole_elevazione = get_altitude(latitudine, longitudine, d_2)
        sole_elevazione_radianti = math.radians(sole_elevazione)
        sole_zenith = 90 - sole_elevazione
        sole_zenith_radianti =  math.radians(sole_zenith)

#visto che la libreria non è in grado di gestire valori di elevazione negativi si forza il codice

        if sole_elevazione < 0:
           sole_elevazione = 0

#pysolar calcola anche l'irraggiamento diretto teorico

        irraggiamento_diretto = radiation.get_radiation_direct(d_2, sole_elevazione)

# per fare i confronti con dati lamma è utile sapere l'intensità di flusso diretto su un piano
#il lamma misura sul piano la totale e la diffusa. la differenze possiamo dire che è la diretta su un piano
#il calcolo è simile solo che come cos prendiamo  quello dell'elevazione del sole 

        irraggiamento_diretto_su_piano_terreno = abs(math.cos(sole_zenith_radianti)) * irraggiamento_diretto 
        aaaa=aaaa+1
        flusso_diretto_medio_teorico_W_mq_array_anno.append(irraggiamento_diretto_su_piano_terreno)

        #ora creo il coefficiente moltiplicativo che rappresenti il rapporto fra
        #il calcolo teorico sul pannello piano a terra e il dato sperimentale
        for bbbb in range(525599):
            bbbb=bbbb+1
            if flusso_diretto_medio_W_mq_array_anno[bbbb] == 0:
               k = 0
            else:
               k = (flusso_diretto_medio_teorico_W_mq_array_anno[bbbb])/(flusso_diretto_medio_W_mq_array_anno[bbbb])
        k_array.append(k)

但它说“ k = (flusso_diretto_medio_teorico_W_mq_array_anno[bbbb])/(flusso_diretto_medio_W_mq_array_anno[bbbb])

IndexError: list index out of range" 有什么想法吗?谢谢

4

1 回答 1

0

您尝试从索引列表中获取价值,然后是列表的长度。这不是正确的方法。

您应该检查列表中存在的索引

if index > len(arr):
    # index not found
于 2015-11-14T16:29:22.433 回答