将长2D矩阵分割成第三维

Amr*_*mro 13 matlab matrix vectorization multidimensional-array

说我有以下矩阵:

A = randi(10, [6 3])
     7    10     3
     5     5     7
    10     5     1
     6     5    10
     4     9     1
     4    10     1
Run Code Online (Sandbox Code Playgroud)

我想提取每两行并将它们放入第三维,因此结果如下:

B(:,:,1) =
     7    10     3
     5     5     7
B(:,:,2) =
    10     5     1
     6     5    10
B(:,:,3) =
     4     9     1
     4    10     1
Run Code Online (Sandbox Code Playgroud)

我显然可以使用for循环执行此操作,只是想知道如何使用permute/reshape/.. 更加优雅地进行单线程(注意矩阵大小和步骤必须是参数)

% params
step = 5;
r = 15;
c = 3;

% data
A = randi(10, [r c]);
B = zeros(step, c, r/step); % assuming step evenly divides r

% fill
counter = 1;
for i=1:step:r
    B(:,:,counter) = A(i:i+step-1, :);
    counter = counter + 1;
end
Run Code Online (Sandbox Code Playgroud)

gno*_*ice 13

这是使用RESHAPEPERMUTE的单行解决方案:

C = 3;          % Number of columns
R = 6;          % Number of rows
newR = 2;       % New number of rows
A = randi(10, [R C]);  % 6-by-3 array of random integers
B = permute(reshape(A.', [C newR R/newR]), [2 1 3]);
Run Code Online (Sandbox Code Playgroud)

这当然要求均reshape分为permute.