список пользовательских классов, преобразованных в массив numpy - PullRequest
0 голосов
/ 06 июня 2019

у меня такой класс

class Point:
    def __init__(self, x,y,z):
        self.x = x
        self.y = y
        self.z = z

где x, y, z равны float

и я хочу сделать это:

p = Point(0,0,0)
arr_p = np.array(p)
arr_pts = np.array([p])

что я ожидаю:

>>> arr_p
array([0., 0., 0.])
>>> arr_pts
array([[0., 0., 0.]])

и оба имеют dtype=np.float64

Как я могу настроить свой класс для достижения этого?

Что я пробовал: Я видел некоторые комментарии в numpy.array

        object : array_like
            An array, any object exposing the array interface, an object whose
            __array__ method returns an array, or any (nested) sequence.

поэтому я просто добавил

    def __array__(self):
        return [self.x, self.y, self.z]

Но это не работает .... Я не знаю, что это значит под array, это уровень C, который нам нужен для управления разметкой памяти?

1 Ответ

1 голос
/ 06 июня 2019

Вы можете определить метод __len__ и __getitem__:

class Point:
    def __init__(self, x,y,z):
        self.x = x
        self.y = y
        self.z = z

    def __len__(self):
        return 3

    def __getitem__(self, idx):
        return (self.x, self.y, self.z)[idx]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...