Python numpy创建副本而不是引用

时间:2016-10-22 20:58:32

标签: python python-3.x numpy copy

我正在尝试用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

这是我的代码,用png-Image读取。现在我要修改imageEdited_3d但不是imageOriginal_3d,如下所示:

imageEdited_3d[x,y,0] = 255

但是imareOriginal_3d变量的值与imageEdited_3d变量的值相同...

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

1 个答案:

答案 0 :(得分:7)

您需要创建对象的副本。您可以使用numpy.copy()来执行此操作,因为您拥有numpy个对象。因此,您的初始化应该是:

imageEdited_3d = imageOriginal_3d.copy()

还有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)

说明

  

浅拷贝构造一个新的复合对象,然后(到...)   尽可能地将引用插入到找到的对象中   原来。

     

深层复制构造一个新的复合对象,然后递归地,   将副本插入原始文件中找到的对象。