如何堆叠矩阵的子矩阵以降低维度
How to stack submatrices of a matrix to reduce dimensionality
我找不到好的解决方案:
我有一个这样大小的矩阵:60x10x3
然后我想把它转换成这样大小的矩阵:600x3
基本上我想在第一维中将尺寸为 60x3 的 10 个矩阵彼此相邻堆叠。
如何在 matlab 中优雅地实现它?
A = rand(60, 10, 3);
B = reshape(A, [], size(A, 3));
应该适用于 A
的任何维度。
我似乎不明白预期的输出是什么,但这里有两种不同的实现方式。我添加了循环以创建不同的数字,以便研究结果。
方法 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 中有多种方法可以实现相同的输出。确实是非常强大的工具。
这是一个解决方案
stack[s] the 10 matrices with the dimension 60x3 next to each other in the first dimension.
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];
我找不到好的解决方案:
我有一个这样大小的矩阵:60x10x3
然后我想把它转换成这样大小的矩阵:600x3
基本上我想在第一维中将尺寸为 60x3 的 10 个矩阵彼此相邻堆叠。
如何在 matlab 中优雅地实现它?
A = rand(60, 10, 3);
B = reshape(A, [], size(A, 3));
应该适用于 A
的任何维度。
我似乎不明白预期的输出是什么,但这里有两种不同的实现方式。我添加了循环以创建不同的数字,以便研究结果。
方法 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 中有多种方法可以实现相同的输出。确实是非常强大的工具。
这是一个解决方案
stack[s] the 10 matrices with the dimension 60x3 next to each other in the first dimension.
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];