2017-09-21 12 views
-1

함수를 사용하여 행렬을 에크론 형식으로 줄이려고하지만 함수를 호출 할 때 인수도 변경됩니다. 다음 코드는함수 호출이 인수를 변경하는 중 파이썬

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) 

출력 : [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 

출력 : [5.10000000e + 00 8.70000000e +00] [0.00000000e 5.88235294e + 00 - 03] 파이썬 [9.48 0.01882353]

답변

0

모든 변수 REF ers를 대상으로합니다. 객체 포인터를 참조하므로 객체 자체를 사용하고 있습니다. 해당 함수는 r[j] 같이 E[j,k]Er을 참조하고 동일한 개체를 사용하는 것을 의미하고이 조작되는 의미 그것에 할당되어있어서
.
는 함수 (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) 
을의 처음 copy를 사용해보십시오