Python numpy创建副本而不是引用

Gyk*_*nik 0 python numpy copy python-3.x

我正在尝试用numpy创建一个python程序,但我遇到了一个问题:

width, height, pngData, metaData = png.Reader(file).asDirect()
planeCount = metaData['planes']
print('Bildgroesse: ' + str(width) + 'x' + str(height) + ' Pixel')
image_2d = np.vstack(list(map(np.uint8, pngData)))
imageOriginal_3d = np.reshape(image_2d, (width, height, planeCount)) 
imageEdited_3d = imageOriginal_3d
Run Code Online (Sandbox Code Playgroud)

这是我的代码,用png-Image读取.现在我想编辑imageEdited_3d但不是imageOriginal_3d,像这样:

imageEdited_3d[x,y,0] = 255
Run Code Online (Sandbox Code Playgroud)

但那时imareOriginal_3d变量的值与那个变量相同imageEdited_3d......

有谁知道,我怎么解决这个问题?所以它不仅创建了一个引用,而且创建了一个真正的副本?:/

Moi*_*dri 7

您需要创建对象的副本.您可以使用,numpy.copy()因为您有numpy对象.因此,您的初始化应该是:

imageEdited_3d = imageOriginal_3d.copy()
Run Code Online (Sandbox Code Playgroud)

还有copy用于创建深拷贝 OR,浅拷贝的模块.这与对象类型无关.例如,您使用的代码copy应为:

from copy import copy, deepcopy

# Creates shallow copy of object
imageEdited_3d = copy(imageOriginal_3d)

# Creates deep copy of object
imageEdited_3d = deepcopy(imageOriginal_3d)
Run Code Online (Sandbox Code Playgroud)

描述:

浅拷贝构造新化合物对象,然后(在可能的范围)插入到其在原始找到的对象的引用.

深层副本构造新化合物的对象,然后,递归地,插入拷贝到它在原始找到的对象的.

  • @wedran 确实有。深拷贝更耗时!尝试[这个要点](https://gist.github.com/we-taper/6a3e933fe2ff434c7bc313f51a07f1a4) (3认同)