如何堆叠矩阵的子矩阵以减少维数

时间:2017-06-05 14:46:05

标签: matlab matrix dimensions

我找不到一个好的解决方案:

我有一个这样大小的矩阵: 60x10x3

我希望将其转换为此大小的矩阵: 600x3

基本上我想在第一维中将尺寸 60x3 的10个矩阵堆叠在一起。

如何在matlab中优雅地实现这一目标?

3 个答案:

答案 0 :(得分:1)

A = rand(60, 10, 3);
B = reshape(A, [], size(A, 3));

应适用于A的任何维度。

答案 1 :(得分:1)

似乎我不明白预期的输出是什么,但这有两种不同的方法来实现它。我添加了循环以创建不同的数字,因此可以研究结果。

方法1 - 垂直或水平堆叠

s = zeros(60,10,3);
for x = 1:9
    s(:,x,:) = x;
end
t = reshape(s, 600, 3); %vert
u = t'; %hori

方法2 - 垂直或水平堆叠第三维

s = zeros(60,10,3);
for x = 1:9
    s(:,x,:) = x;
end
t = [s(:,:,1) , s(:,:,2), s(:,:,3)]; % hori
t = [s(:,:,1) ; s(:,:,2); s(:,:,3)]; % vert

希望它有所帮助,但这表明在Matlab中有多种方法可以实现相同的输出。确实非常强大的工具。

答案 2 :(得分:0)

这是

的解决方案
  

在第一维中堆叠10个矩阵,其尺寸为60x3,彼此相邻。

a = rand(60,3,10);
% swap the 2nd and 3rd dimention
b = permute(a,[1,3,2]);
% condense to 2d
c = b(:,:);
% reshape x, y and z seperately so each group of 60 xs/ys/zs appends to the end of the previous group
x=reshape(c(:,1:3:end),[],1);
y=reshape(c(:,2:3:end),[],1);
z=reshape(c(:,3:3:end),[],1);
% condense to one 600*3 matrix
d = [x y z];