Сохранение данных в массив 3D numpy - PullRequest
0 голосов
/ 08 мая 2020

У меня есть данные акселерометра (x, y, z), которые обновляются каждые 50 мс. Мне нужно сохранить 80 значений данных в массиве 3D numpy (1, 80, 3). Например:

[[[x,y,z] (at 0ms)
  [x,y,z] (at 50ms)
  ...
  [x,y,z]]] (at 4000ms)

После получения первых 80 значений мне нужно обновить массив следующими значениями, например:

[[[x,y,z] (at 50ms)
  [x,y,z] (at 100ms)
  ...
  [x,y,z]]] (at 4050ms)

Я уверен, что есть способ обновить массив без необходимости вручную записывать 80 переменных для хранения данных, но я не могу об этом думать. Был бы очень признателен за помощь здесь.

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Похоже, вы хотите, чтобы ваш массив всегда был длиной 80, поэтому я бы предложил roll массив, а затем обновить последнее значение.

import numpy as np

data = np.arange(80*3).reshape(80, 3)
data
>>> array([[  0,   1,   2],
           [  3,   4,   5],
           [  6,   7,   8],
           ...,
           [231, 232, 233],
           [234, 235, 236],
           [237, 238, 239]])

data = np.roll(data, -1, axis=0)
data
>>> array([[  3,   4,   5], # this is second row (index 1) in above array
           [  6,   7,   8], # third row
           [  9,  10,  11], # etc.
           ...,
           [234, 235, 236],
           [237, 238, 239],
           [  0,   1,   2]]) # the first row has been rolled to the last position

# now update last position with new data
data[-1] = [x, y, z] # new xyz data
data
>>> data
>>> array([[  3,   4,   5], 
           [  6,   7,   8],
           [  9,  10,  11],
           ...,
           [234, 235, 236],
           [237, 238, 239],
           [ 76,  76,  76]]) # new data updates in correct position in array
0 голосов
/ 08 мая 2020

Вы можете использовать vstack (инициализация массива для первой итерации):

data=[x,y,x]  # first iteration
data=np.vstack([data,[x,y,z]]) # for the rest

print(data) # you would have a Nx3 array

Для обновления каждые N секунд проще использовать FIFO или кольцевой буфер: https://pypi.org/project/numpy_ringbuffer/

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