[英]Reshape 3d matrix to 2d matrix
我在MATLAB中有一個3d矩陣( n-by-m-by-t
)表示在一段時間內網格中的n-by-m
測量。 我想有一個2d矩陣,其中空間信息消失了,只留下了時間t
n*m
測量值(即: n*m-by-t
)
我怎樣才能做到這一點?
你需要命令reshape
:
說你的初始矩陣是(只為我獲取一些數據):
a=rand(4,6,8);
然后,如果最后兩個坐標是空間的(時間是4,m是6,n是8),則使用:
a=reshape(a,[4 48]);
你最終得到一個4x48陣列。
如果前兩個是空間的,最后一個是時間(m是4,n是6,時間是8),則使用:
a=reshape(a,[24 8]);
你最終得到一個24x8陣列。
這是一個快速的O(1)操作(它只調整數據形狀的標題)。 還有其他方法可以做到這一點,例如a=a(:,:)
來壓縮最后兩個維度,但重塑更快。
重塑當然是重塑數組的標准解決方案。 (他們還會怎樣稱呼它?)還有一些技巧可以揭開。
首先,將大小為[n,m,p]的數組轉換為大小為[n * m,p]的數組的最簡單方法是什么?
B = reshape(A,n*m,p);
但更好的是:
B = reshape(A,[],p);
如果你將其中一個參數重新整形為空,那么重塑會為你計算大小! 小心,如果你嘗試這個並且A的大小不符合,那么你將得到一個錯誤。 從而:
reshape(magic(3),[],2)
??? Error using ==> reshape
Product of known dimensions, 2, not divisible into total number of elements, 9.
從邏輯上講,我們不能創建一個包含兩列的數組,其中包含9個元素。 我確實在MATLAB Central交換機上安裝了一個名為wreshape的函數,該函數可以根據需要填充,無需生成錯誤。
當然,你總是可以使用像
B = A(:);
直接從矩陣創建矢量。 這相當於表格
B=reshape(A,[],1);
解決這個問題的一個更好的方法是使用Rasmus Bro的N-Way Toolbox提供的nshape.m. 這將允許您沿着給定模式重塑,這對於reshape命令來說有點棘手。
工具箱可從以下鏈接獲得:
https://www.mathworks.com/matlabcentral/fileexchange/1088-the-n-way-toolbox
還有一些其他優秀的工具可以幫助進行數組操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.