Подтвердить что ты не робот

Numpy: расширение массивов вдоль новой оси?

Конечно, должен быть способ сделать это... Я не могу это решить.

У меня есть (9,4) массив, и я хочу повторить его по 3-й оси 4096 раз... Так что это просто (9,4,4096), причем каждое значение из массива 9,4 просто повторяется 4096 раз по новой оси.

Если моя сомнительная трехмерная диаграмма имеет смысл (диагональ является осью z)

4|   /off to 4096
3|  /
2| /
1|/_ _ _ _ _ _ _ _ _ 
   1 2 3 4 5 6 7 8 9

Приветствия

EDIT: просто для уточнения, здесь основное внимание уделяется массиву (9,4), который будет REPEATED для каждой из 4096 "строк" ​​новой оси. Представьте себе поперечное сечение - каждый исходный (9,4) массив является одним из тех, которые находятся ниже 4096 длинного кубоида.

4b9b3361

Ответ 1

Вот один из способов:

import scipy
X = scipy.rand(9,4,1)
Y = X.repeat(4096,2)

Если X предоставляется вам только (9,4), то

import scipy
X = scipy.rand(9,4)
Y = X.reshape(9,4,1).repeat(4096,2)

Ответ 2

Вы также можете полагаться на правила вещания для повторного заполнения массива размера:

import numpy
X = numpy.random.rand(9,4)
Y = numpy.resize(X,(4096,9,4))

Если вам не нравятся упорядоченные оси, вы можете затем транспонировать:

Z = Y.transpose(1,2,0)

Ответ 3

Вопрос супер старый, но вот еще один вариант:

import numpy as np
X = np.random.rand(9,4)
Y = np.dstack([X] * 4096)