我在我的大型代码中发现了一个错误,我将问题简化为以下案例。
虽然在每个步骤中我只更改w1
,但是当我在每个步骤打印出w1 = w2[:]
时,它也会被更改,因为第一个循环的结束我将它们分配为相等。
我读了这篇文章,但有人写的,以防我import numpy as np
import math
w1=np.array([[1,2,3],[4,5,6],[7,8,9]])
w2=np.zeros_like(w1)
print 'w1=',w1
for n in range(0,3):
for i in range(0,3):
for j in range(0,3):
print 'n=',n,'i=',i,'j=',j,'w1=',w1
w2[i,j]=w1[i,j]*2
w1=w2[:]
#Simple tests
# w=w2[:]
# w1=w[:]
# p=[1,2,3]
# q=p[:];
# q[1]=0;
# print p
它会解决问题,但它没有
{{1}}
答案 0 :(得分:5)
问题在于,当您从character
将值分配回w1
时,您实际上并未将值从w2
传递给w1
,而是您实际上是将两个变量指向同一个对象。
您遇到的问题
w2
解决方案
相反,您需要复制值。使用numpy数组有两种常见的方法。
w1 = np.array([1,2,3])
w2 = w1
w2[0] = 3
print(w2) # [3 2 3]
print(w1) # [3 2 3]
np.may_share_memory(w2, w1) # True
示范
w1 = numpy.copy(w2)
w1[:] = w2[:]