У меня есть симуляционная модель, которая объединяет набор переменных, состояния которых представлены массивами numpy произвольного числа измерений. После моделирования у меня теперь есть список массивов, элементы которых представляют состояние переменной в определенный момент времени.Разбиение N-мерного массива numpy на несколько 1D-массивов
Для вывода результатов моделирования я хочу разбить эти массивы на несколько 1D массивов, где элементы соответствуют одному и тому же компоненту переменной состояния во времени. Ниже приведен пример переменной состояния 2D в течение нескольких временных шагов.
import numpy as np
# Arbitrary state that is constant
arr = np.arange(9).reshape((3, 3))
# State variable through 3 time steps
state = [arr.copy() for _ in range(3)]
# Stack the arrays up to 3d. Axis could be rolled here if it makes it easier.
stacked = np.stack(state)
Выход мне нужно, чтобы получить это:
[np.array([0, 0, 0]), np.array([1, 1, 1]), np.array([2, 2, 2]), ...]
Я пытался делать np.split(stacked, sum(stacked.shape[:-1]), axis=...)
(пробовал все для axis=
), но получаю следующее сообщение об ошибке: ValueError: array split does not result in an equal division
. Есть ли способ сделать это, используя np.split
или, возможно, np.nditer
, который будет работать в общем случае?
Я думаю, это было бы эквивалентно делать:
I, J, K = stacked.shape
result = []
for i in range(I):
for j in range(J):
result.append(stacked[i, j, :])
Который также упорядочивание я надеюсь получить. Довольно легко, однако я надеюсь, что есть что-то в numpy, которое я могу использовать для этого, что будет более общим.
Прекрасное использование 'list'! Выглядит довольно быстро. Чтобы сделать его общим, возможно, мы могли бы использовать параметр формы: 'list (stacked.reshape (-1, stacked.shape [-1]))'. – Divakar
Я испортил пример массива ввода. Должно быть 'stacked = np.stack (state)'. Обновлен вопрос, поэтому теперь ваш ответ должен быть «list (stacked.reshape (3, -1) .T)« Я думаю? Я согласен с @Divakar, отлично использую 'list'! – pbreach
Как насчет стека на другой оси - см. Мои правки – hpaulj