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()