2015-07-30 2 views
0

У меня есть многомерный массив Matlab, который был создан с операциями с использованием переменных, созданной ndgrid команды:Как изменить размер пятимерного массива матрицы, чтобы получить трехмерный массив?

[Z, R, Т, Эс] = ndgrid (г, г, т, Е)

где z = r = 0, а t - вектор значений времени, а E - двумерная матрица размера = [10,80]

Я хочу переделать ее в трехмерную массив размером = [10,80 , length (t)], где вектор t копируется в качестве третьего измерения для каждого из значений 10 * 80, которые соответствуют значениям матрицы E.

Как я могу это сделать? - Насколько я понимаю, функция reshape имеет определенный порядок, в котором он заполняет новый массив?

+0

Каков текущий размер массива? – beaker

+0

Порядок: [linear indexing] (http://blogs.mathworks.com/steve/2008/02/08/linear-indexing/): сначала прогоните первый столбец, затем перейдите во второй столбец, .. ., затем перейдите на второй третий тусклый срез, ... –

ответ

0

Я думаю, что вы можете добиться этого с помощью permute и repmat

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

octave:41> t 
t = 

    0.932698 0.658920 0.090389 0.314648 0.509211 

octave:42> size(E) 
ans = 

    10 180 

octave:43> P = repmat(permute(t,[3,1,2]), [size(E,1), size(E,2), 1]); 
octave:44> size(P) 
ans = 

    10 180  5 

octave:45> P(1:3,1:3, :) 
ans = 

ans(:,:,1) = 

    0.93270 0.93270 0.93270 
    0.93270 0.93270 0.93270 
    0.93270 0.93270 0.93270 

ans(:,:,2) = 

    0.65892 0.65892 0.65892 
    0.65892 0.65892 0.65892 
    0.65892 0.65892 0.65892 

ans(:,:,3) = 

    0.090389 0.090389 0.090389 
    0.090389 0.090389 0.090389 
    0.090389 0.090389 0.090389 

ans(:,:,4) = 

    0.31465 0.31465 0.31465 
    0.31465 0.31465 0.31465 
    0.31465 0.31465 0.31465 

ans(:,:,5) = 

    0.50921 0.50921 0.50921 
    0.50921 0.50921 0.50921 
    0.50921 0.50921 0.50921 

Я не уверен, что это именно то, что вы ищете. Но значения в E не представлены в любом месте, только размеры сохраняются, а значения t повторяются по 3-е измерение каждого элемента в E

Примечание: Если t были cloumn вектор, он должен быть permute(t, [2,3,1]) вместо.

Смежные вопросы