Numpy: расширение массивов вдоль новой оси? - PullRequest
24 голосов
/ 01 марта 2010

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

У меня есть массив (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

Приветствия

РЕДАКТИРОВАТЬ: просто чтобы уточнить, акцент здесь делается на повторяющемся (9,4) массив для каждой из 4096 «строк»новой оси.Представьте себе поперечное сечение - каждый исходный (9,4) массив является одним из тех, что на 4096 длинных кубов.

Ответы [ 3 ]

24 голосов
/ 01 марта 2010

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

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)
9 голосов
/ 02 марта 2010

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

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

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

Z = Y.transpose(1,2,0)
7 голосов
/ 19 июня 2014

Вопрос очень старый, но в любом случае есть еще один вариант:

import numpy as np
X = np.random.rand(9,4)
Y = np.dstack([X] * 4096)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...