Список изменения формы Numpy в 3D-массив

У меня есть список массивов, которые я хотел бы изменить. Каждый массив — это проба, столбцы в каждом массиве — это характеристика, а строки в каждом массиве — это временной шаг. Я бы хотел, чтобы список был изменен на (пробная версия, временной интервал, функция). Например, D — это то, что я пытаюсь преобразовать в 3D-массив — временные интервалы неодинаковы.

A = np.random.rand(3,10) #Trial 1 has 3 timesteps and ten features
B = np.random.rand(10,10) #Trial 2 has 10 timesteps and ten features
C = np.random.rand(7,10) #Trial 3 has 7 timesteps and ten features
D = [A,B,C,D] #Data as given in the form of a list

Как я могу получить трехмерный массив с переменными временными шагами? Я пытаюсь использовать это как вход в нейронную сеть keras.

Проще говоря, вы не можете.

Quang Hoang 09.12.2020 22:10

Что такое приложение? вам разрешено интерполировать между временными шагами, чтобы сделать все испытания равными?

sai 09.12.2020 22:16

@sai Это приложение для классификации последовательностей. Основываясь на том, что сказал Куангхоанг, я просто добавлю массивы, а затем изменю форму.

GK89 09.12.2020 22:23

Возможно, это не лучшая идея, но не стесняйтесь попробовать. Однако я бы попытался понизить дискретизацию всех испытаний до 3 временных шагов или повысить дискретизацию менее частых испытаний, если бы у меня было представление о том, что представляют собой функции и как они могут варьироваться в зависимости от их физики.

sai 09.12.2020 22:27
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
4
195
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать следующее:

D = tf.ragged.stack([tf.RaggedTensor.from_tensor(x) for x in [A, B, C]])

Это дает неровный тензор формы: TensorShape([3, None, None])

Или

values = np.vstack([A, B, C])
D = tf.RaggedTensor.from_row_lengths(values, [x.shape[0] for x in [A, B, C]])

что дает рваный тензор формы: (3, None, 10)

Работа с рваными тензорами в keras может быть сложной.

Как правило, для большинства приложений лучше всего использовать разумное число для максимального размера последовательности и маскировать пустые последовательности. Для некоторых приложений, над которыми я работаю, это не очень привлекательный вариант, потому что у меня много документов с очень маленькими последовательностями, а затем некоторые с очень большими последовательностями. Но если вы не чувствуете себя комфортно с механикой keras/tensorflow, вам, вероятно, следует избегать использования рваных тензоров.

Другие вопросы по теме