Gå til innhold

[Løst][Python] Problem med å skrive til matriser


Anbefalte innlegg

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
Videoannonse
Annonse

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 av purity
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...