假设我有以下矩阵:
A = randi(10, [6 3])
7 10 3
5 5 7
10 5 1
6 5 10
4 9 1
4 10 1
我想提取每两行并将它们放在第三维中,结果应该像这样:
B(:,:,1) =
7 10 3
5 5 7
B(:,:,2) =
10 5 1
6 5 10
B(:,:,3) =
4 9 1
4 10 1
我显然可以用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
A'
作为第一个参数传递给RESHAPE的原因。有关MATLAB中矩阵索引的更多信息,请查看此链接:http://www.mathworks.com/company/newsletters/digest/sept01/matrix.html - gnovice