【发布时间】:2018-06-06 13:50:06
【问题描述】:
我正在尝试创建一个 NumPy 对象数组,如下所示...
import numpy as np
class Pixel:
def __init__(self):
self.r = 0
self.g = 0
self.b = 0
class Image:
def __init__(self):
self.pixels = np.full((4, 4), Pixel())
if __name__ == '__main__':
image = Image()
print(image.pixels)
输出是……
[[<__main__.Pixel object at 0x02A92F70>
<__main__.Pixel object at 0x02A92F70>]
[<__main__.Pixel object at 0x02A92F70>
<__main__.Pixel object at 0x02A92F70>]]
似乎创建了一个相同对象的数组。我的问题是如何为每个像素使用不同的对象初始化数组?
亲切的问候
【问题讨论】:
-
如果您查看 numpy.full 的源代码(此处为:github.com/numpy/numpy/blob/v1.14.2/numpy/core/…),您会看到它将您提供给它的对象 n 次复制到给定的数组中。您将不得不使用另一种方法,或者循环和复制(这对于大数组来说不是最佳的,授予)
-
full适用于数值,这将是唯一的。但是您正在构建一个对象 dtype 数组,它类似于list包含指向内存中其他地方的对象的指针。alist = [Pixel()]*4也会遇到同样的问题,列出复制。
标签: python class numpy object initialization