我无法找到一个很好的解决方案:如何叠矩阵的子矩阵来降低维
我有这种规模的矩阵:60x10x3
而且我希望把它改造成这个尺寸的矩阵:600x3
基本上我想与尺寸60x3在第一维度中彼此相邻堆叠的10点矩阵。
我该如何在matlab中实现这个优雅?
我无法找到一个很好的解决方案:如何叠矩阵的子矩阵来降低维
我有这种规模的矩阵:60x10x3
而且我希望把它改造成这个尺寸的矩阵:600x3
基本上我想与尺寸60x3在第一维度中彼此相邻堆叠的10点矩阵。
我该如何在matlab中实现这个优雅?
看来我不明白预期的输出是什么,但这里有两种不同的方式来实现它。我添加了循环来创建不同的数字,因此可以研究结果。
方法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中实现相同的输出。确实非常强大的工具。
A = rand(60, 10, 3);
B = reshape(A, [], size(A, 3));
应适用于任何尺寸的A
。
这里是一个解决方案,
堆[秒]的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];
我想我甚至发现了一个(相当难看)解决方案我自己,这就是为什么我问,感谢显示不同的可能性。 基本上,我有10组随着时间的推移60组测量。我将这10组视为独立测量。基本上有600个数据点,因此我不需要将它们逻辑分开 – Jonas