函数调用更改其参数 python
Function call changing its 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)
output: [[ 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
output:[[ 5.10000000e+00 8.70000000e+00]
[ 0.00000000e+00 5.88235294e-03]] [ 9.48 0.01882353]
在python中,每个变量都指向一个对象。它引用对象指针,因此它使用的是对象本身。
在该函数中,您正在引用 E
和 E[j,k]
以及 r
和 r[j]
并分配给它,这意味着您正在使用 同一个对象 意味着你在操纵它。
尝试在函数的第一个位置使用 copy
(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)
我正在尝试使用函数将矩阵缩减为阶梯形式,但在调用该函数时,它也会更改其参数。这是代码
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)
output: [[ 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
output:[[ 5.10000000e+00 8.70000000e+00] [ 0.00000000e+00 5.88235294e-03]] [ 9.48 0.01882353]
在python中,每个变量都指向一个对象。它引用对象指针,因此它使用的是对象本身。
在该函数中,您正在引用 E
和 E[j,k]
以及 r
和 r[j]
并分配给它,这意味着您正在使用 同一个对象 意味着你在操纵它。
尝试在函数的第一个位置使用 copy
(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)