我正尝试如下操作矩阵的副本。
import numpy as np
A = np.matrix([[4, 1, -1, 1], [1, 4, -1, -1], [-1, -1, 5, 1], [1, -1, 1, 3]])
B = A
B[0, 0] = 0
这也会将A的00项也更改为0,但是我不希望发生这种情况。我也尝试过np.array(),但是同样的事情再次发生。我认为这是因为A和B指向内存中的同一位置。
如果有人让我知道如何在B更改时阻止A更改,我将不胜感激。
答案 0 :(得分:0)
您完全正确,A
和B
指向您所用的相同内存分配。
numpy
具有您想要实现的复制功能:
B = np.copy(A)
答案 1 :(得分:0)
当您执行B = A
时,B只是对已经存在的数组A
的引用。由于效率原因,NumPy不会直接复制。
因此,您应该使用arr.copy()
复制数组的内容,如下所示:
In [9]: B = A.copy()
In [10]: A
Out[10]:
matrix([[ 4, 1, -1, 1],
[ 1, 4, -1, -1],
[-1, -1, 5, 1],
[ 1, -1, 1, 3]])
# update an entry in array `B`
In [11]: B[0, 0] = 0
# A is unaffected
In [12]: A
Out[12]:
matrix([[ 4, 1, -1, 1],
[ 1, 4, -1, -1],
[-1, -1, 5, 1],
[ 1, -1, 1, 3]])
# change happens only in array B
In [13]: B
Out[13]:
matrix([[ 0, 1, -1, 1],
[ 1, 4, -1, -1],
[-1, -1, 5, 1],
[ 1, -1, 1, 3]])
答案 2 :(得分:0)
尝试一下:
B[:] = A
这将进行深度复制
答案 3 :(得分:0)
您需要创建对象的副本。您可以使用numpy.copy进行此操作,因为您正在使用numpy对象。
因此,您的代码将如下所示:
B = np.copy(A)
python使用两种复制。
浅表副本会构造一个新的复合对象,然后(在可能的范围内)将对原始对象中的对象的引用插入其中。
深层副本会构造一个新的复合对象,然后递归地将原始对象中的对象的副本插入其中。
它们独立于对象类型工作。
from copy import copy, deepcopy
# Shallow copy
b= copy(a)
# Deep copy of object
b= deepcopy(a)
答案 4 :(得分:0)
您是正确的,现在您的B和A正在引用内存中的同一位置。对于您的问题,我建议
-vm
C:\Program Files\Java\jdk-10.0.1\bin\javaw.exe
在此处查看文档:{{3}}
这里有一个示例,其中包含您要查找的内容:
numpy.matrix.copy