MATLAB Answers

convert a 3D matrix to a 2D matrix

42 ビュー (過去 30 日間)
Ara Jo
Ara Jo 2020 年 9 月 23 日 12:27
コメント済み: madhan ravi 2020 年 9 月 23 日 12:46
Hello,
I'm trying to convert a A by B by C matrix (3D) into a A*C by B matrix (2D). But I need the column (with A*C elements) to be not stacked, but alternated. To explain,
I would like to convert a 2 by 2 by 3 matrix X:
val(:,:,1) =
1 2
1 2
val(:,:,2) =
2 3
2 3
val(:,:,3) =
3 4
3 4
into 2*3 by 2 matrix:
[1 2
2 3
3 4
1 2
2 3
3 4]
I have tried:
X1=permute(X,[1 3 2]);
X2=reshape(X1,[6,2]);
but it generates:
X2 =
1 2
1 2
2 3
2 3
3 4
3 4
which is NOT what I want.
Is there a way to do this? Any advice appreciated!

  0 件のコメント

サインインしてコメントする。

採用された回答

madhan ravi
madhan ravi 2020 年 9 月 23 日 12:33
reshape(permute(val, [2, 1, 3]), size(val, 2), []).'

  2 件のコメント

Ara Jo
Ara Jo 2020 年 9 月 23 日 12:38
But this generates X2, which is not what I'm trying to get?
madhan ravi
madhan ravi 2020 年 9 月 23 日 12:46
X2 = reshape(permute(val, [3, 1, 2]), [], size(val, 2))

サインインしてコメントする。

その他の回答 (1 件)

KSSV
KSSV 2020 年 9 月 23 日 12:32
iwant = X2 ;
iwant(1:2:end,:) = X2(1:3,:) ;
iwant(2:2:end,:) = X2(4:end,:) ;

  0 件のコメント

サインインしてコメントする。

カテゴリ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by