Как создать контейнер, который поддерживает добавление объектов и нарезку кусков? - PullRequest
1 голос
/ 07 октября 2019

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

import numpy as np
  1. Предположим, чтообъект MyObj, который имеет несколько полей, а именно x, y, z. Thee поля являются numy ndarrays:

пример:

x_shape = (1,2,3)
y_shape = (5,6,7,8,9)

def MyObj(object):
    def init(self):
        self.x = np.zeros(x_shape)
        self.y = np.zeros(y_shape)
Я бы хотел управлять этими объектами в контейнере, который позволяет мне эффективно добавлять объекты один за другим

пример:

my_obj1 = MyObj()
my_obj2 = MyObj()
my_obj3 = MyObj()
my_obj4 = MyObj()
objs = MyContainer()  # this is what the question is about
objs.append(my_obj1)
objs.append(my_obj2)
objs.append(my_obj3)
objs.append(my_obj4)
Контейнер должен поддерживать эффективный доступ к своим полям, как если бы он был пустым символом, форма которого совпадает с желаемым полем, с дополнительным первым измерением, с тем же размером, что и объекты вконтейнер:

пример:

assert objs.x.shape == (len(objs),) + x_shape  # (4,1,2,3)
assert objs.y.shape == (len(objs),) + y_shape  # (4,5,6,7,8,9)
access_to_field = objs.x[:, 0,0,0] # access to the first element in X of all objects in the container. **This has to be efficient, just like a numpy view**

Я не смог найти нативный способ сделать это в numpy, и я хочу узнать лучшие практики для этого стандартаслучай использования.

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