FonderPrism Skrevet 13. februar 2010 Del Skrevet 13. februar 2010 Jeg sitter for tiden og prøver å programmere en matte-oppgave i forbindelse med studier. Programmet mitt ser slik ut: from numpy import* import newtonfler eps = 1e-5 N = 40 X = Y = n = matrix(zeros([801,801])) h = 2.8/800 a = -1.4 + h*arange(0,801,1) b = a for i in range(0,801,1): for j in range(0,801,1): X[i,j], Y[i,j], n[i,j] = newtonfler.newtonfler(a[i],b[j],eps,N) Funksjonen "newtonfler" er et selvskrevet program som returnere en liste slik som dette: [-0.49999999999999095, -0.86602540378444048, 5] Men når jeg kjører det øverste programmet blir matrisene X, Y og n fylt med helt like tall, mer nøyaktig det siste av de tre tallene "newtonfler" returnerer. Eksempel fra etter en delvis kjøring: >>> X matrix([[ 4., 4., 4., ..., 4., 4., 4.], [ 4., 4., 4., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.]]) >>> Y matrix([[ 4., 4., 4., ..., 4., 4., 4.], [ 4., 4., 4., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.]]) >>> n matrix([[ 4., 4., 4., ..., 4., 4., 4.], [ 4., 4., 4., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], ..., [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.], [ 0., 0., 0., ..., 0., 0., 0.]]) Det merkelige er, at når jeg kjører f.eks, X[0,0], X[0,1], X[2,0] = newtonfler.newtonfler(a[0],b[0],eps,N) så får jeg de tallene jeg skulle hatt. Men ikke når jeg prøver å kjøre f.eks, X[0,0], Y[0,0], n[0,0] = newtonfler.newtonfler(a[0],b[0],eps,N) da får jeg bare fire-tall. Vet noen hvordan jeg kan få det jeg ønsker? Altså at de tre tallene fra "newtonfler"-funksjonen lagres i henholdsvis X[i,j], Y[i,j] og n[i,j] for hver iterasjon. Newtonfler- og program-filen er vedlagt i en .zip-fil nedenfor. Program_og_newtonfler.zip Lenke til kommentar
zotbar1234 Skrevet 13. februar 2010 Del Skrevet 13. februar 2010 from numpy import* import newtonfler eps = 1e-5 N = 40 X = Y = n = matrix(zeros([801,801])) (...) Mulig jeg misforstår hva du ønsker, men er du klar over at X, Y og n refererer til det samme objektet i minne? Vil du virkelig dette? Lenke til kommentar
FonderPrism Skrevet 13. februar 2010 Forfatter Del Skrevet 13. februar 2010 (endret) Nei det var jeg faktisk ikke klar over. Jeg tenkte bare at den linjen oppretter X, Y og n som tre forskjellige matriser. Men disse vil da forbli like når jeg skriver til en av de? Programmet ser ut til å fungere slik det skal nå, så takk skal du ha Finnes det en mer effektiv måte å kode dette på, når ikke det jeg prøvde først fungerer? X = matrix(zeros([801,801])) Y = matrix(zeros([801,801])) n = matrix(zeros([801,801])) Altså å opprette f.eks tre variabler som skal ha samme verdi, uten at de blir samme objektet. Endret 13. februar 2010 av purity Lenke til kommentar
snippsat Skrevet 14. februar 2010 Del Skrevet 14. februar 2010 Altså å opprette f.eks tre variabler som skal ha samme verdi, uten at de blir samme objektet. Det er greit og gjøre det som i ditt siste eksempel. from numpy import* X = matrix(zeros([801,801])) print id(X) Y = matrix(zeros([801,801])) print id(Y) '''Out--> 14592432 21088048 ''' from numpy import* X = Y = n = matrix(zeros([801,801])) print id(X) print id(Y) '''Out--> 14592432 14592432 ''' Som du ser her refereres det til samme objektet i minne. Viss du vil ha det på en line kan du jo gjøre det sånn X,Y,n = matrix(zeros([801,801])), matrix(zeros([801,801])), matrix(zeros([801,801])) Lenke til kommentar
FonderPrism Skrevet 15. februar 2010 Forfatter Del Skrevet 15. februar 2010 Ok, tusen takk skal du ha Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå