2011-04-08 30 views
1

我有一個M-M-n矩陣,其是N M-通過-M矩陣的級聯。我想通過取每個M-by-M子矩陣的對角線並將它們連接在一起來將這個矩陣減少到M×N矩陣。我怎樣才能以簡單的矢量化的方式做到這一點?如何在MATLAB中建立3-D矩陣的對角線索引?

+0

嗯,我想我回答過這樣的事情,但我花了一些時間來找到它:對角線變化1在MATLAB 4維矩陣(http://stackoverflow.com/questions/ 5319178 /改變-對角線對1-IN-A-4維矩陣中與Matlab)。儘管存在細微差別(分配與索引,三維與四維),但答案足夠一般,以至於問題可能被認爲是重複的。也許標題和標籤的改進是爲了使這些更容易找到(我發現自己最近說了很多)。 – gnovice 2011-04-08 18:13:17

+0

很多問題在的提問者的需要來描述(例如,如何可以計算從等等等等的濃度),但在本質上,矩陣操作的問題。我建議在提問者滿意後稍後進行清理,以使其更加普遍(即剝離特定需求並將其修剪至裸露骨頭)。這實際上可以幫助尋找答案的人更容易地找到他們,並希望減少欺騙,因爲在大多數情況下,混淆是因爲問題措辭的方式。 – abcd 2011-04-08 18:26:12

+0

@R。 M .:我已經做了一些編輯,以便標題和標籤更清晰,並希望能夠在搜索這種矩陣操控問題時更好地顯示出來。 – gnovice 2011-04-08 18:28:57

回答

3

您可以通過獲取對角線的線性指標,並用它來形成一個新的矩陣

[M,~,N]=size(A);%# A is your matrix 
indx=cumsum([1:(M+1):M^2; M^2.*ones(N-1,M)]);%#diagonal indices 

B=A(indx');%'# transpose to get MxN 

在上面做了,我用~忽視從功能輸出。但是,只有當您使用MATLAB R2009b及更高版本時纔有效。如果您的版本比這更老,請改用一個虛擬變量。