Forum >> Programmazione Python >> Files e Directory >> Scrittura valori array su colonne da un ciclo

Pagina: 1

Buonasera a tutti. Ho provato a risolvere il mio problema cercando in internet, ma essendo molto niubba non sono riuscita a venire a capo del problema.
Sto scrivendo un programma che simula 10000 volte 450 misure.





q=10000

m=450

#CICLO DI SIMULAZIONE

for i in range(0,q):

a=np.random.normal(muT,sigmanc,m)

s=a

np.savetxt('datisim.dat',s, delimiter=" ")





Io vorrei scrivere i vari valori presenti nell'array a, che sono 450, in 10000 colonne( che equivale al termine del ciclo). Se lascio così il codice penso mi sovrascriva sempre i vari array, mentre a me servirebbero affiancati su colonne diverse.

Vi ringrazio infinitamente per la disponibilità.



Fammi capire bene il problema, perché mi sfugge cosa vuoi ottenere, posta magari anche il resto del codice ricordandoti di utilizzare il tasto per il corretto allineamento della sintassi.

Comunque sia se ho vagamente capito (ma sono sicuro di no), non puoi risolvere tutto con una lista? Array è un termine in Python che ha un senso relativo (invece ha molto senso in numpy), ma se la tua paura è di sovrascrivere ad ogni passaggio l'oggetto, ti basterà utilizzare il metodo append e passa la paura.

A presto.
Cya
sigmanc=input('Inserisci sigmanc')
#Devo simulare q volte 450 misure di pendolo
outfile_9=open('stimesim.dat', 'w')
outfile_9.write('numero media varianzanc\n')
outfile_10=open('datisim.dat', 'w')
q=10000
m=450
#CICLO DI SIMULAZIONE
for i in range(0,q):
 a=np.random.normal(muT,sigmanc,m)
 s=a
 
 outfile_9.write(('%f %f\n')%(i,j))
 musim=sum(s)/m
 #print i
 
 differenzesim=[(j-musim)**2 for j in s ]
 varncsim=sum(differenzesim)/m
 #print musim, varncsim
 outfile_9.write(('%f %f %f\n')%(i,musim,varncsim))
 
 
outfile_9.close() 
ni,musim,varncsim=np.loadtxt('stimesim.dat',skiprows=1,usecols=(0,1,2),unpack=True)
#print len(mu)
#print len(varnc)
mediamedia=sum(musim)/len(musim) #media delle medie
mediavar=sum(varncsim)/len(varncsim) #Media delle varianze

differenzesim2=[(k-mediamedia)**2 for k in musim]
varianzamedia=(sum(differenzesim2))/(len(musim)*(len(musim)-1)) #Varianza della media
sigmamedia=math.sqrt(varianzamedia)
print 'La media delle medie e', mediamedia
print 'La media delle varianze e', mediavar
print 'La varianza della media e', varianzamedia
print 'La deviazione standard della media e', sigmamedia
print 'Test di Pearson per i dati della simulazione',

#istogrammi
num_binsmu=70
ns, binssim, patches=plt.hist(musim,num_binsmu,normed=0) #bins=Estremo destro
plt.xlabel('Valore')
plt.ylabel('Frequenza')
plt.title("Medie")
plt.show()

num_binsvar=65
ns2, binssim2, patches=plt.hist(varncsim,num_binsvar,normed=0) #bins=Estremo destro
plt.xlabel('Valore')
plt.ylabel('Frequenza')
plt.title("Varianze")
plt.show()
Questo è il mio programma simulazione. Il suo compito è quello di andare a simulare q=10000 volte un set di m=450 misure.

Io vorrei avere incolonnati separatamente tutti questi set di 450 misure, perchè poi dovrò utilizzarli singolarmente per andare a calcolarmi delle variabili di chi quadro, per applicare il Test di Pearson... E' un programma per l'esame di statistica. Non so se così è più chiaro. L'obiettivo sarebbe quello di prelevare con un ciclo sulle colonne i valori delle singole colonne per andare a calcolare quelle variabili.
P.S.
L'idea sarebbe simile a quello che fa questo codice. Ho messo in questo caso q=10 per lavorare più velocemente come prova.




for i in range(0,q):
 a=np.random.normal(muT,sigmanc,m)
 s=a
 for j in s:
  outfile_10.write(('%f %f\n')%(i,j))
Solamente che questo ciclo mi dà il valori che io voglio uno sotto l'altro. (Vedi file allegato), mentre io vorrei che, ad esempio, la colonna relativa a i=1 sia di fianco a quella i=0




Grazie.

Francesca
Allegati
Ciao Francesca, facciamo un semplicissimo esempio. Usando numpy genero tre diversi array molto molto semplici:
>>> arrA = np.array([1,2,3])
array([1, 2, 3])

>>> arrB = np.array([4,5,6])
array([4, 5, 6])

>>> arrC = np.array([7,8,9]))
array([7, 8, 9])
Ora questi array li voglio mettere in un singolo file, ma in colonne:
>>> output = np.column_stack((arrA.flatten(),arrB.flatten(),arrC.flatten()))
>>> np.savetxt('datisim.dat ',output,delimiter=',')
>>> cat datisim.dat
1.000000000000000000e+00,4.000000000000000000e+00,7.000000000000000000e+00
2.000000000000000000e+00,5.000000000000000000e+00,8.000000000000000000e+00
3.000000000000000000e+00,6.000000000000000000e+00,9.000000000000000000e+00
Ci siamo, è quello che cerchi o perlomeno siamo sulla strada giusta?
Cya


Pagina: 1



Esegui il login per scrivere una risposta.