2016-04-29 3 views
3

У меня есть многомерная матрица J размера 27 матрица с размерностью N что матрица с размерностью я хочу объединить в вертикально в матрицу 2*N матрицы с размерностью 7.Вертикально конкатенация многомерной матрицы

Так, например:

>> J(:,:,1:2) 

ans(:,:,1) = 

1.0000   0   0 0.2263   0 0.0069 0.4996 
    0 1.0000   0 1.4156   0 -0.1665 0.0208 

ans(:,:,2) = 

2.0000   0   0 -0.3432   0 -0.0069 0.4996 
    0 3.0000   0 1.3919   0 0.1665 0.0208 

Потребности быть сцеплены в

1.0000   0   0 0.2263   0 0.0069 0.4996 
    0 1.0000   0 1.4156   0 -0.1665 0.0208 
2.0000   0   0 -0.3432   0 -0.0069 0.4996 
    0 3.0000   0 1.3919   0 0.1665 0.0208 

Как это может быть сделано?

ответ

3

Используйте permute, чтобы изменить порядок размеров, а затем reshape изменить его на матрицу 2*N7 матрицы с размерностью:

reshape(permute(J, [1,3,2]),[],size(J,2)); 

Причиной вы нуждаетесь в permute потому, что MATLAB является столбцам означает, что она хранит элементы многомерных массивов в виде векторов, сначала сбрасывая столбцы. Поэтому, когда вы вызываете reshape, он сначала смотрит вниз по столбцам, а затем переходит к следующему столбцу, когда заканчивается строка. Поскольку вы хотите уложить свое 3-мерное измерение под своим 1-м измерением, вам нужно убедиться, что, когда reshape закончится, он переходит в третье измерение. Так как reshape действительно идет во второе измерение, вам нужно использовать permute, чтобы поменять ваши второе и третье измерения.

Просто для удовольствия, вот еще один способ сделать это:

J2 = permute(J, [2,1,3]); 
J2(:,:).' 

И третий используя comma-separated-lists вместо

C = mat2cell(J, size(J,1), size(J,2), ones(1,1,size(J,3))); 
cat(1,C{:}) %// Or vertcat(C{:}) 
+0

работал отлично! Спасибо за помощь, очень ценим. – mittwoch1989

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