フィルターのクリア

Command to reshape matrix diagonally

1 回表示 (過去 30 日間)
fr_sk
fr_sk 2016 年 4 月 8 日
コメント済み: Andrei Bobrov 2016 年 4 月 8 日
Hi, i'd like to transform
X = 1 100 40
2 107 30
3 90 50
4 120 60
into
Y = 1 100 40 3 90 50
2 107 30 4 120 60
I thought
Y = reshape(X,2,6)
would do the trick but it didn't give me the matrix I was looking for.
Any quick ideas will be appreciated.
Thanks!

採用された回答

Andrei Bobrov
Andrei Bobrov 2016 年 4 月 8 日
編集済み: Andrei Bobrov 2016 年 4 月 8 日
% X - array with size [5541888 x 7]
% m2 - number of rows in second array, m2 = 1536
[~,n] = size(X);
out = reshape(permute(reshape(X',n,m2,[]),[1 3 2]),[],m2)';
or
[m,n] = size(X);
a = mat2cell(X,m2*ones(m/m2,1),n);
out = [a{:}];
  2 件のコメント
fr_sk
fr_sk 2016 年 4 月 8 日
This is the perfect solution, it works like charm!!! Thank you so much!
Just so I understand what you did: What does [1 3 2] do in this case? Also why X' instead of X ?
Andrei Bobrov
Andrei Bobrov 2016 年 4 月 8 日
rewrite on separate commands:
[~,n] = size(X);
a = reshape(X',n,m2,[]);
b = permute(a,[1 3 2]);
out = reshape(b,[],m2)';
Please read about MATLAB functions: ' - transpose, reshape, permute.

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

その他の回答 (1 件)

Rick Rosson
Rick Rosson 2016 年 4 月 8 日
Y = [ X(1:end/2,:) X(end/2+1:end,:) ];
  1 件のコメント
fr_sk
fr_sk 2016 年 4 月 8 日
Wow, thanks a lot for the fast response. This works very well for this example. My actual dataset has the dimensions of 5541888 x 7, which I want to stack according to your method to obtain a 1536 X 25256 matrix.
I wanted to apply your idea, but then I realized that I have to enter the code for each column manually. Do you think there is a way to do it for these dimensions?

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

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by