2

私は 40x16 マトリックスまたは 8 つの 5x16 を上下に配置しています。つまり、垂直方向に配置しています。そこから 5x128 マトリックスを取得して、8 つの 5x16 マトリックスを水平方向に整列させたいと考えています。これを行うための(ハードコードされたforループではなく)効率的/迅速な方法はありますか?

個々の 5x16 行列をそのままにしておきたいのです。

4

4 に答える 4

1

これはうまくいくはずです。マトリックスが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));
于 2012-06-15T20:33:11.307 に答える
0

reshape関数doc@mathworksの使用を検討してください。

于 2012-06-15T07:52:19.463 に答える
0

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

于 2014-04-22T06:56:57.990 に答える
0

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{:})
于 2012-06-17T17:00:16.550 に答える