我有这段代码,我必须在其中处理 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" 有什么想法吗?谢谢