我对python很陌生,以前使用过Matlab,对于python中的变量有一些混淆。
我正在尝试用python重写Matlab代码,这里是混乱的地方。让我们说,我有以下情况:
>>> A = np.array([[1,2,3],[4,5,6]])
>>> out = np.array([[True, False, True],[False, True, False]])
>>>
>>> B = A
>>>
>>> B[out] = A[out]+1
>>>
>>> B
array([[2, 2, 4],
[4, 6, 6]])
>>> A
array([[2, 2, 4],
[4, 6, 6]])在Matlab中,A不随同一段代码而改变,但在python中却是如此。任何人都可以解释为什么和什么是最好的方法来避免变化的A?
代码-图像:为什么分配A到B在流程中?
发布于 2019-01-03 16:07:01
通过做
B = A您正在创建对同一个对象A的另一个引用,因此A产生的所有更改都将自动反映在B中。在本例中复制列表/数组的适当(少数)方法
B = A[::]或
B = A.copy()通过这种方式,您可以将元素复制到列表变量中,而无需创建指向原始变量A的指针,从而使它们在内存地址项中解耦。
正如乔恩·克莱门茨指出的,
[::]的意思是开始,以1的步长结束,这意味着[0:len(obj):1],而[:]意味着[:len(obj)],obj是您的对象。
正如下面@Patrick所指出的,如果您的A是一个numpy矩阵,您也可以这样做
B = np.copy(A)https://stackoverflow.com/questions/54025870
复制相似问题