2015-06-29 3 views
-8

У меня есть матрица. Я хочу, чтобы получить вектор из матрицы, как описано в примере ниже:Преобразование матрицы в вектор

Matrix = [ 2 4 5; 
      8 2 13; 
      0 3 1; 
      7 7 7; 
      36 62 72; 
      44 35 26; 
      63 11 4; 
      9 9 9 ]; 

vector = [ 2 8 0 4 2 3 5 13 1 7 36 44 63 62 35 11 72 26 4 9]; 

Вектора вставляет каждые значения из первых трех строк из каждого столбца. Затем он вставляет значение четвертой строки один раз. Затем процесс повторяется таким же образом для остальных элементов в матрице. Как это сделать в Matlab?

+1

Что вы думаете о перекроить, с циклом? В любом случае, вы должны показать, что вы делали до сих пор. Сделайте это, и у вас будет больше шансов получить помощь здесь. – patrik

+0

В вашем описании говорится, что вы каким-то образом переупорядочиваете элементы, но матрица и вектор содержат разные элементы. – Daniel

+0

Я пробовал переформатировать матрицу, но она не работает. – Dani

ответ

0

Ваша проблема очень специфическая. Я не понимаю, как это будет полезно для кого-либо, кроме вас самих. Не существует «одного линейного решения». Есть много способов, чтобы подходить к решению проблем индексации, я хотел бы использовать скалярную индексацию, когда это возможно:

Ncolumns = size(Matrix,1); 
Nblocks = floor(Ncolumns/4);         %number of 4-line blocks (excluding the last block if it is not a full 4-lines) 
IndexVector = (1:3)'*ones(1,3) + ones(3,1)*(0:2) * Ncolumns; %this gives 3 lines as specified. 
IndexVector = [IndexVector(:); 4];       %this adds the first element of 4th line, as spec. 
IndexVector = IndexVector*ones(1,Nblocks)+ones(10,1)*(0:Nblocks-1)*4; %this repeats the above for rest of blocks. 
IndexVector = IndexVector(:)';        %make row vector 

vector=Matrix(IndexVector); 

if mod(Ncolumns,4)        %this deals with the last partial block 
    subMat=Matrix(Nblocks*4+1:end,1:3); 
    vector=[vector subMat(:)']; 
end  
Смежные вопросы