Python Numpy can';t控制阵列的变化

Python Numpy can';t控制阵列的变化,python,arrays,numpy,Python,Arrays,Numpy,如果我在这行前后打印x1,我会得到不同的结果。更具体地说,此行之后的x1值等于y[:,2] y[:,2] = np.ravel(rkf78(neq,ti,(ti-step),(step/50),tetol,x1)) 我找到了这个解决方案,但有关阵列更改的事情似乎给我带来了很多麻烦。有人能给我一个关于numpy阵列的好解释吗?如果没有看到rkf78函数,就很难看到x1列表是如何使用的。我还假设x1是一个列表或numpy数组 关于列表和数组的问题是,当您将一个设置为另一个时 y[:,2] = np

如果我在这行前后打印
x1
,我会得到不同的结果。更具体地说,此行之后的
x1
值等于
y[:,2]

y[:,2] = np.ravel(rkf78(neq,ti,(ti-step),(step/50),tetol,x1))

我找到了这个解决方案,但有关阵列更改的事情似乎给我带来了很多麻烦。有人能给我一个关于numpy阵列的好解释吗?

如果没有看到rkf78函数,就很难看到x1列表是如何使用的。我还假设x1是一个列表或numpy数组

关于列表和数组的问题是,当您将一个设置为另一个时

y[:,2] = np.ravel(rkf78(neq,ti,(ti-step),(step/50),tetol,(np.copy(x1))))
如果x1是您的列表,对
dummy_list
所做的任何更改都将反映在
x1
中,因为您没有创建独立副本,只创建了对旧列表的新引用。这就是为什么
np.copy(x1)
可能有效的原因;这将创建一个具有新内存id的列表,对该列表所做的任何更改都不会反映在
x1

另一个解决方案:

dummy_list = x1
本质上与以前做的事情相同,但也考虑列表中的列表。但这不能用于数组


为便于将来参考,请添加更多有关与问题有关的代码元素的信息。

这些表达式中有太多未知变量。但是我猜,
rkf78
正在更改
x1
输入。参数通过引用传递给函数,函数内部的更改可以出现在函数外部的变量中。如果
x1
是一个numpy数组(与列表相对)
np。复制
就足够了。对于数组没有特殊的deepcopy方法。谢谢hpaulj,我将更改我的答案以反映这一点
from copy import deepcopy
dummy_list = deepcopy(x1)