Я опишу простейший вариант использования, в котором я не смог использовать numpy способом, который кажется мне довольно интуитивным и потребовал бы некоторого дополнительного уровня абстракции:
import numpy as np
- Предположим, чтообъект
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, и я хочу узнать лучшие практики для этого стандартаслучай использования.