Python Создание нескольких экземпляров класса - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать массив объектов 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>]]

, который, кажется, создал массиводного и того же объекта.У меня вопрос, как инициализировать массив с различным объектом для каждого пикселя?

С уважением

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Спасибо за все ответы, самые полезные.Метод, который я нашел, который работает лучше всего для моего конкретного случая, - это использовать метод numpy.empty () для создания массива правильного размера, а затем перебирать элементы, заполняющие массив новыми объектами.Возможно, он не самый эффективный, но самый читаемый для меня.

0 голосов
/ 06 июня 2018

Вы можете использовать функцию 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) объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...