我试图按如下方式创建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>]]
似乎已经创建了同一个对象的数组。我的问题是如何使用不同的对象为每个像素初始化数组?
亲切的问候
答案 0 :(得分:3)
您可以使用np.array
函数并从标准python列表中对其进行初始化,如下所示:
class Image:
def __init__(self):
self.pixels = np.array([Pixel() for i in range(2 * 2)]).reshape([2, 2])
结果如下:
[[<__main__.Pixel object at 0x00000218B89F6438>
<__main__.Pixel object at 0x00000218B89F64A8>]
[<__main__.Pixel object at 0x00000218B89F4D68>
<__main__.Pixel object at 0x00000218B89F43C8>]]
如你所见,它们不是同一个对象。
请注意,它不会影响您的时间复杂度,因为在任何情况下您都需要初始化O(n)
个对象。
答案 1 :(得分:0)
感谢所有回复,最有帮助。我发现最适合我的特定情况的方法是使用numpy.empty()方法创建正确大小的数组,然后遍历元素填充新对象的数组。它可能不是最有效,但对我来说却最具可读性。