尽管是分开的,但是当更换另一个时,numpy数组会意外地发生变化

时间:2016-03-14 01:32:58

标签: python numpy matrix

我在我的大型代码中发现了一个错误,我将问题简化为以下案例。

虽然在每个步骤中我只更改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}}

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[:]