创建一个副本而不是 NumPy 数组的引用

2023-08-31Python开发问题
4

本文介绍了创建一个副本而不是 NumPy 数组的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在尝试使用 NumPy 制作 Python 程序,但遇到了问题:

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

这是我的代码,用于读取 PNG 图像.现在我想编辑 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

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

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? :/

推荐答案

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

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()

还有 copy 模块用于创建深拷贝浅拷贝.这与对象类型无关.例如,您使用 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)

说明:

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

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.

这篇关于创建一个副本而不是 NumPy 数组的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

pandas 有从特定日期开始的按月分组的方式吗?
Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)...
2024-08-22 Python开发问题
10

GROUP BY+新列+基于条件的前一行抓取值
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10