2017-06-05 83 views
1

我無法找到一個很好的解決方案:如何疊矩陣的子矩陣來降低維

我有這種規模的矩陣:60x10x3

而且我希望把它改造成這個尺寸的矩陣:600x3

基本上我想與尺寸60x3在第一維度中彼此相鄰堆疊的10點矩陣。

我該如何在matlab中實現這個優雅?

回答

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中實現相同的輸出。確實非常強大的工具。

+0

我想我甚至發現了一個(相當難看)解決方案我自己,這就是爲什麼我問,感謝顯示不同的可能性。 基本上,我有10組隨着時間的推移60組測量。我將這10組視爲獨立測量。基本上有600個數據點,因此我不需要將它們邏輯分開 – Jonas

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

應適用於任何尺寸的A

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];