2017-09-21 2 views
-1

Ich versuche, eine Matrix zu seiner Echlon-Form mit einer Funktion zu reduzieren, aber auf den Aufruf der Funktion, es ändert auch seine Argumente. Hier ist der CodeFunktionsaufruf ändert sein Argument Python

def GaussE(E,r): 
    N = np.size(r) 
    for i in range(0,N-1): 
     for j in range(i+1,N): 
      f=(E[j,i]/E[i,i]) 
      r[j]= r[j] -(f)*r[i]    
      for k in range(i,N):       
       E[j,k] = E[j,k]-(f*E[i,k]) 
    return(E,r) 
A = np.array([[5.10,8.70],[2.40,4.10]]) 
b = np.array([9.48,4.48]) 
print(A,b) 

Ausgang: [[5.1 8.7] [2.4 4.1]] [9.48 4.48]

X = GaussE(A[:],b[:]) 
print(A,b) # Why is A and b changing? they should not change 

Ausgang: [[5.10000000e + 00 8.70000000e +00] [0.00000000e + 00 5.88235294e-03]] [9.48 0,01882353]

Antwort

0

In python jede Variable ref zu einem Objekt. Es bezieht sich auf den Objektzeiger, so dass es das Objekt selbst verwendet.
In dieser Funktion können Sie es E wie E[j,k] und r wie r[j] und Zuweisen verweisen, was bedeutet, Sie dass gleiche Objekt verwenden und bedeutet, dass Sie es sind, zu manipulieren.
Versuchen copy bei der ersten Ihrer Funktion (from copy import copy)

from copy import copy 

def GaussE(E,r): 
    E = copy(E) 
    r = copy(r) 
    N = np.size(r) 
    for i in range(0,N-1): 
     for j in range(i+1,N): 
      f=(E[j,i]/E[i,i]) 
      r[j]= r[j] -(f)*r[i]    
      for k in range(i,N):       
       E[j,k] = E[j,k]-(f*E[i,k]) 
    return(E,r) 
A = np.array([[5.10,8.70],[2.40,4.10]]) 
b = np.array([9.48,4.48]) 
print(A,b) 
zu verwenden
Verwandte Themen