Список объектов в виде массива numpy - PullRequest
1 голос
/ 06 апреля 2020

У меня есть класс с некоторыми полями, и я хочу, чтобы он был представлен в виде массива numpy.

class Circle:
    def __init__(self, cX, cY, rad, color):
        self.cX = cX
        self.cY = cY
        self.rad = rad
        self.color = color

    # some methods...

Я знаю, что для печати я должен определить метод __str__(). Есть ли похожий механизм для массивов numpy? В частности, я хочу что-то вроде этого:

list_of_objs = [Circle() for i in range(100)]
numpy_representatin = numpy.asarray(list_of_objs) # shape have to be (4, 100)

Заранее спасибо!

UPD: забыл упомянуть, что предполагается, что все поля одного типа - int

1 Ответ

3 голосов
/ 06 апреля 2020

Я думаю, вам должно помочь следующее: Написание пользовательских массивов контейнеров

Как упомянуто в ссылке выше:

"Мы можем преобразовать в numpy массив с использованием numpy.array или numpy.asarray, который вызовет его __array__ -метод для получения стандартного numpy.ndarray. "

Таким образом, ваш класс может выглядеть примерно так:

class Circle:
    def __init__(self, cX, cY, rad, color):
        self.cX = cX
        self.cY = cY
        self.rad = rad
        self.color = color

    def __array__(self):
        return np.array([self.cX, self.cY, self.rad, self.color], np.int32)

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