私は 40x16 マトリックスまたは 8 つの 5x16 を上下に配置しています。つまり、垂直方向に配置しています。そこから 5x128 マトリックスを取得して、8 つの 5x16 マトリックスを水平方向に整列させたいと考えています。これを行うための(ハードコードされたforループではなく)効率的/迅速な方法はありますか?
個々の 5x16 行列をそのままにしておきたいのです。
これはうまくいくはずです。マトリックスがA
(40x16) であるとします。
を使用する方法は次のreshape
とおりです。
m = 5; n = 8; p = 16;
B = reshape(permute(reshape(A', p, m, n), [2 1 3]), m, n*p);
B には、8 つの 5x16 マトリックスがそのまま並んでいます。
そして、ここにない方法がありreshape
ます:
m = 5; n = 8;
B = cell2mat(arrayfun(@(i) A(m*(i-1)+1:m*i, :), 1:n, 'UniformOutput', false));
reshape
関数doc@mathworksの使用を検討してください。
3 行 4 列の行列を 2 行 6 列の行列に変形します。A = 1 4 7 10 2 5 8 11 3 6 9 12
B = reshape(A,2,6)
B = 1 3 5 7 9 11 2 4 6 8 10 12 B = reshape(A,2,[])
B = 1 3 5 7 9 11 2 4 6 8 10 12
MAT2CELL を使用して、大きな行列を小さな行列に分割してから、必要な次元に沿って組み合わせることができます。
A = rand(8*5,16);
blkSz = 5;
C = mat2cell(A, blkSz*ones(1,size(A,1)/blkSz), size(A,2));
C = cat(2,C{:})