2015-03-10 2 views
0

Я использовал функцию reshape(), чтобы помочь изменить размеры трехмерной матрицы на двумерную. Например:inverse reshape in matlab

a = [1 2; 3 4]; 
b = [5 6; 7 8]; 
c = cat(3,a,b); 

Здесь c - это матрица с 3-мя размерами. Я использовал reshape изменить его таким образом:

[n,m,d] = size(c); 
d = reshape(c, [n*m , d]); 

Размер d является 4х2.

После этой операции, как мне вернуться c от d? То, что я хотел бы знать, - это инверсия функции reshape.

спасибо.

ответ

1

Слегка изменив свои нотации (у вас есть 2 d):

a = [1 2; 3 4]; 
b = [5 6; 7 8]; 
c = cat(3,a,b); 
[n,m,d] = size(c); 
dd = reshape(c, [n*m , d]); 
cc = reshape(dd, [n, m , d]); 

и вы можете проверить, что cc равно c.

+0

Благодарим за ответ, – mysticsasuke

1

Я думаю, проблема в том, что вы переписывали глубину массива d, чтобы быть измененным массивом. Попробуйте:

[n,m,p] = size(c); 
d = reshape(c, [n*m , p]); 
reshape(d,[n m p]) 

Результат:

ans(:,:,1) = 

    1  2 
    3  4 


ans(:,:,2) = 

    5  6 
    7  8