Python numpy create copy and not reference

风格不统一 提交于 2019-12-20 07:06:37

问题


I'm trying to make a python program with numpy, but I ran into a problem:

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

This is my code, to read in a png-Image. Now I want to edit imageEdited_3d but NOT imageOriginal_3d, like this:

imageEdited_3d[x,y,0] = 255

But then the imareOriginal_3d variable has the same values as the imageEdited_3d one...

Does anyone know, how I can fix this? So it doesn't only creates a reference, but it creates a real copy? :/


回答1:


You need to create the copy of the object. You may do it using numpy.copy() since you are having numpy object. Hence, your initialisation should be like:

imageEdited_3d = imageOriginal_3d.copy()

Also there is copy module for creating the deep copy OR, shallow copy. This works independent of object type. For example, your code using copy should be as:

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)

Description:

A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original.

A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.



来源:https://stackoverflow.com/questions/40196995/python-numpy-create-copy-and-not-reference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!