2014-11-27 2 views
2

Я хотел бы преобразовать матрицу A в матрицу B без использования клеток (например mat2cell) в Matlab, гдеКак отрезать матрицу в Matlab?

A=[1 2 3; 
    4 5 6; 
    7 8 9; 
    10 11 12; 
    13 14 15; 
    16 17 18; 
    19 20 21; 
    22 23 24; 
    25 26 27]; 

B=[1 2 3 10 11 12 19 20 21; 
    4 5 6 13 14 15 22 23 24; 
    7 8 9 16 17 18 25 26 27]; 
+0

Являются ли они точными размерами, или они могут измениться? В основном, что вы хотите сделать, это объединить строки, индексы которых изменяются в прыжках 3 ...? –

+0

[This] (http://stackoverflow.com/questions/20336288/for-loop-to-split-matrix-to-equal-sized-sub-matrices) может помочь –

ответ

2

Все, что вам нужно, это некоторые reshape + permute magic -

N = 3; %// Cut after every N rows and this looks like the no. of columns in A 
B = reshape(permute(reshape(A,N,size(A,1)/N,[]),[1 3 2]),N,[]) 
0

Это строит линейный индекс переставить вхождения A, а затем перестраивает в нужной матрицу B:

m = 3; %// cut size in rows of A. Assumed to divide size(A,1) 
n = size(A,2); 
p = size(A,1); 
ind = bsxfun(@plus, ... 
     bsxfun(@plus, (1:m).', (0:n-1)*p), permute((0:p/m-1)*m, [1 3 2])); 
B = reshape(A(ind(:)), m, []) 
Смежные вопросы