从数组赋值会更改数组本身

时间:2015-08-06 08:44:45

标签: python arrays numpy

将数组中的值分配给另一个数组时,右侧的数组会发生变化。你能否指出我可能犯的错误?

下面的代码找到了最长的序列,我遇到了最后一行yy[-1] = y[n]的问题。每当这一行执行时,y中的值也会改变。

import numpy as np

p = np.array([466, 5500, 2615, 4056, 2196, 4254, 2987, 5125, 1060, 7344, 2990])
y = p.argsort()

yy = y[-2:]
yy = yy[::-1]

n = len(y)-2

while(n>0):
    n = n-1
    if (y[n] < yy[-1]):
        yy = np.append(yy,y[n])

    if ((y[n] > yy[-1]) & (y[n] < yy[-2])):
            yy[-1] = y[n]

1 个答案:

答案 0 :(得分:2)

您可以阅读numpy guide

  

基本切片生成的所有数组始终是原始数组的视图。

这意味着yyy基本上是相同底层数据结构的不同视图。因此,当您更改第一个时,您也会更改第二个,反之亦然。

最简单的方法是在切片后复制数组,转动以下行:

yy = y[-2:]

成:

yy = y[-2:].copy()