2013-07-24 2 views
0

У меня есть матрица размером (A) = 20x301088 и еще один вектор linear_index, который равен 301088x1. Мне нужно преобразовать A в массив размером 97x97x32x20. Но он должен быть в определенном порядке, вектор linear_index содержит линейные индексы 97x97x32 в определенном порядке.Преобразование матрицы в массив

Например, элемент в точке A (20,4) следует поместить в linear_index (4) из B (:,:,:, 20). Надеюсь, это имеет смысл. Каждая строка A будет создавать собственную матрицу 97x97x32, а элементы будут помещаться в индексы, заданные значением в линейном_индексе.

Я сделал это один раз, но это требует shiftdim команды:

B (1: длина (лк), linear_index) = A (1: длина (Lx), :); B = shiftdim (A, 1);

Это работает, но команда shiftdim занимает немного времени, тем более, что размер моих матриц может достигать 97x97x32x194.

+0

что это? Матлаб, Октав? Вы должны четко указать, что с соответствующим тегом – piokuc

+0

Мои извинения, это мой первый раз, используя этот сайт. Спасибо. Это Matlab, но я уже понял решение. –

ответ

0

Как насчет

>> B = A(:,linear_index)'; %' re-order and permute 
>> B = reshape(B, 97, 97, 32, 194, 20); 
+1

Спасибо. Я работал с этим A (linear_index, :) = A (1: length (linear_index), :); B = изменить форму (A, [97 97 32 20]); Возможно, что-то похожее на то, что вы написали. –

+0

@RossAnthonyDiJulio so 'linear_index' - это обратная карта ... nice – Shai