Массив Python с фиксированной длиной, но с последовательным заполнением новых значений - PullRequest
0 голосов
/ 24 февраля 2019

Давайте предположим, что у нас есть переменная (shape (1, N, a, b, c)), которая хранит массивы с формой (a, b, c).Сначала я хочу инициализировать эту переменную нулями

import numpy as np
N = 5
a = 20
b = 40
c = 4
storage = np.zeros(1, N, a, b, c)
# collect new arrays
while True:
    values = np.random.random((a, b, c))  # np.array with shape (a, b, c)
    save_values_to_storage(values)

Цель функции save_values_to_storage (values) - заполнить значения из хранилища.В первом цикле значения (1, N, ...) хранилища будут заполнены values.В следующем цикле (1, N, ...) значения хранилища будут заполнены values, а предыдущие значения будут перемещены в (1, N-1, ...).И так далее.Если первое сохраненное значение values достигло первой позиции (1, 1, ...), а новые values были извлечены и сохранены, то первое значение values будет выброшено так, что новые значения values будут сохранены в положении (1, N, ...) и все другие значения, уменьшенные их положением.

Я не знаю, как мне добиться такого поведения.Это что-то вроде очереди за массивами.Поэтому мой вопрос заключается в том, как я могу реализовать функцию save_values_to_storage(values)?

Edit : похоже, deque похожи.Но я не знаю, как использовать их для массива NumPy

1 Ответ

0 голосов
/ 25 февраля 2019

Я думаю, что решил проблему.Я не уверен, что это лучший способ сделать это.Я ценю любые улучшения.

import numpy as np
import random

N = 5
a = 20
b = 40
c = 4
inputs = np.zeros((N, a, b, c))
for i in range(0, 10):
    # replace right hand side with method that gets values
    values = np.random.random((a, b, c))
    # expand the dimension to fit to inputs
    values = np.expand_dims(values, axis=0)
    # delete values in first entry of inputs
    inputs = np.delete(inputs, obj=0, axis=0)
    # concatenate inputs and values to a new array
    inputs = np.concatenate([inputs, values], axis=0)
    # for debugging
    # print('shape: {}'.format(inputs.shape))

# expand the dimension with an additional first dimension to achieve (1, N, a, b, c)  # shape.
inputs = np.expand_dims(inputs, axis = 0)
...