首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python创建类的多个实例

Python创建类的多个实例
EN

Stack Overflow用户
提问于 2018-06-06 21:50:07
回答 2查看 381关注 0票数 2

我正在尝试创建一个NumPy对象数组,如下所示...

代码语言:javascript
复制
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)

输出结果是...

代码语言:javascript
复制
[[<__main__.Pixel object at 0x02A92F70>
  <__main__.Pixel object at 0x02A92F70>]
 [<__main__.Pixel object at 0x02A92F70>
  <__main__.Pixel object at 0x02A92F70>]]

它似乎已经创建了同一对象的数组。我的问题是如何为每个像素初始化一个不同对象的数组?

亲切的问候

EN

回答 2

Stack Overflow用户

发布于 2018-06-06 22:40:33

您可以使用np.array函数,并在标准python列表中进行初始化,如下所示:

代码语言:javascript
复制
class Image:
def __init__(self):
    self.pixels = np.array([Pixel() for i in range(2 * 2)]).reshape([2, 2])

结果如下:

代码语言:javascript
复制
[[<__main__.Pixel object at 0x00000218B89F6438>
  <__main__.Pixel object at 0x00000218B89F64A8>]
 [<__main__.Pixel object at 0x00000218B89F4D68>
  <__main__.Pixel object at 0x00000218B89F43C8>]]

如你所见,它们不是同一个物体。

注意,它不会降低您的时间复杂度,因为在任何情况下,您都需要初始化O(n)对象。

票数 3
EN

Stack Overflow用户

发布于 2018-07-04 03:33:59

谢谢你所有的回复,非常有用。我发现最适合我的特殊情况的方法是使用numpy.empty()方法创建一个大小正确的数组,然后遍历用新对象填充该数组的元素。它可能不是最有效的,但它对我来说是最易读的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50722162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档