Python - linspace()显示奇怪的行为

时间:2014-02-21 01:33:02

标签: python numpy

我遇到了np.linspace()的问题,我不知道它为什么会这样。 我的代码如下所示:

x = linspace(0, 6, 3)
print 'x = ', x     # prints the correct values x =  [ 0.  3.  6.]
y = x; y *= 3; y += 3
print 'y = ', y     # prints the correct values y =  [  3.  12.  21.]
z = x; z *= 3; z -= 3
print 'z = ', z     # prints the correct values z =  [  6.  33.  60.]

# and then this ???
print x, y, z       # prints [  6.  33.  60.] [  6.  33.  60.] [  6.  33.  60.]

有人知道为什么打印x,y,z没有像以前那样返回正确的值(打印x,打印y等等?我是否必须将x,y,z转换为单独的新数组以便他们打印正确吗? 非常感谢提前启发!

2 个答案:

答案 0 :(得分:4)

在执行赋值时,numpy数组指向相同的内存位置。要将值复制到新的内存位置,请执行y = x.copy()

答案 1 :(得分:1)

正如ssm所说,当你使y = x时,y指向内存中与x相同的位置。因此,y或x变量的任何变化都会影响它们,只是因为两个变量都指向相同的内存位置!当你不想要这种行为时,建议使用copy,如“ssm”所示,或者简单地说,你可以将x乘以,比方说,1:y = 1.0 * x。最后一个与x.copy()具有相同的行为,但请注意,您可以更改变量的类型。

就像一个好奇心:如果你处理numpy数组,方法副本就会实现,所以,为了制作x的副本,你可以使用

y = x.copy()

通常,如果要在Python中复制任何对象,可以使用deepcopy:

import copy
y = copy.deepcopy(x)