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)