Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数组的赋值会更改数组本身_Python_Arrays_Numpy - Fatal编程技术网

Python 数组的赋值会更改数组本身

Python 数组的赋值会更改数组本身,python,arrays,numpy,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)-

将一个值从一个数组赋给另一个数组时,右侧的数组会发生变化。你能指出我可能犯的错误吗

下面的代码找到了最长的递增序列,最后一行出现问题
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]
将numpy导入为np
p=np.数组([46655002615405620196196425429875125106073442990])
y=p.argsort()
yy=y[-2:]
yy=yy[:-1]
n=len(y)-2
而(n>0):
n=n-1
如果(y[n]yy[-1])和(y[n]
您可以在以下内容中阅读:

通过基本切片生成的所有阵列始终是原始阵列的视图

这意味着
y
yy
基本上是相同底层数据结构的不同视图。所以当你改变第一个你也改变了第二个,反之亦然

最简单的方法是在对阵列进行切片后复制阵列,转动以下线条:

yy = y[-2:]
进入:


我没有认真阅读您的代码,但从我的角度来看,问题似乎发生了,因为NumPy阵列在切片时返回轻量级包装,而不是新阵列。因此,
yy
y
是同一数组的不同视图。因此,在共享位置上的所有操作都会影响
y
yy
,但随后会得到
np。在那里追加
,这会在某个点返回一个新数组。顺便说一句,在循环中使用
np.append
效率很低。如果您确实需要具有就地
附加功能的快速轻量级动态C-阵列,请使用
阵列.array
。循环结束后,如果需要特殊的NumPy功能,只需将其转换为NumPy数组即可。@EliKorvigo感谢您的改进意见
yy = y[-2:].copy()