У меня есть следующий вариант использования:
Я получаю 100 выборок в секунду из нескольких numpy nd-массивов, скажем a
формы (4, 3)
и b
формы (5, 6)
.
В других случаях я мог бы получить c
формы (2, 3)
и d
формы (3, 5)
и e
другой формы и т. д.
Эти образцы поступают в течение некоторого переменного времени между одним образцом и 360000 образцами (час).
Я хотел бы обработать весь сеанс потоковой передачи как объект
Я хотел бы иметь что-то вроде
class Aggregator_ab(object):
def __init__(self):
self.a = ???
self.b = ???
def add_sample(new_a, new_b):
self.a.update(new_a) # How can I achieve such an update?
self.b.update(new_b) # How can I achieve such an update?
Теперь я хотел бы
получить доступ к полям Aggregator_ab
как numpy массивы:
agg = Aggregator_ab() # maybe with parameters?
num_samples = 4
for i in range(num_samples):
agg.add_sample(new_a=np.zeros((4, 3), new_b=np.zeros((5, 6))
assert agg.a.shape[0] == num_samples
assert agg.b.shape[0] == num_samples
assert agg.a.shape[1:] == (4, 3)
assert agg.b.shape[1:] == (5, 6)
И я также ожидал бы регулярного numpy поведения членов agg
.
Мой текущий код имеет некоторые проблемы и выглядит примерно так:
class Aggregator_ab(object):
def __init__(self):
self.__as = []
self.__bs = []
def add_sample(new_a, new_b):
self.__as.append(new_a)
self.__bs.append(new_b)
@property
def a(self):
return np.vstack(self.__as)
@property
def b(self):
return np.vstack(self.__bs)
проблемы:
- может получить только "полный "numpy массив после использования
vstack
- должен использовать дорогой
vstack
каждый "получить" - не может использовать предыдущий
vstacks
- добавление любого поля требует большого количества шаблонов, которые я хотел бы extract
- Это поддерживает только очень ограниченные варианты использования, и если я когда-либо захочу чего-то большего, мне придется реализовать себя.
- просмотр собственных списков python - единственный способ масштабирования размер массива, не платя слишком много за изменение размера. Если бы я использовал vstack для хранения массива numpy в больших размерах, я бы не справился с частотой кадров.
Это кажется мне обычным делом случай, поэтому я считаю, что кто-то решил это до меня.
Есть ли какая-нибудь библиотека, которая делает это? Я знаю, pandas звучит правильно, но что мне делать, если у меня есть поля, которые такое матрицы?
Если нет, то как с этим обычно справляются?