我目前正在开发一个Python程序,涉及使用NumPy进行图像处理。然而,我在尝试创建NumPy数组的深度副本而不仅仅是复制引用时遇到了一个问题。
下面是我的代码片段,我读入一个PNG图像并将其分配给imageOriginal_3d
:
width, height, pngData, metaData = png.Reader(file).asDirect()
planeCount = metaData['planes']
print('Image Size: ' + 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 // TODO: CREATE DEEP COPY
我的意图是编辑imageEdited_3d
而不影响imageOriginal_3d
中的值。但是,当我修改imageEdited_3d
时,所做的更改当前也出现在imageOriginal_3d
中。
1条答案
按热度按时间nfeuvbwi1#
您需要创建对象的副本。你可以使用
numpy.copy()
来实现,因为你有numpy
对象。因此,你的初始化应该是这样的:还有
copy
模块用于创建 deep copy 或 shallow copy。这与对象类型无关。例如,使用copy
的代码应该如下所示:浅拷贝构造一个新的复合对象,然后(尽可能地)将对原始对象的引用插入其中。
deep copy构造一个新的复合对象,然后递归地将在原始对象中找到的对象的副本插入其中。