如何在MATLAB中建立3-D矩阵的对角线索引?

问题描述:

我有一个M-M-n矩阵,其是N M-通过-M矩阵的级联。我想通过取每个M-by-M子矩阵的对角线并将它们连接在一起来将这个矩阵减少到M×N矩阵。我怎样才能以简单的矢量化的方式做到这一点?如何在MATLAB中建立3-D矩阵的对角线索引?

+0

嗯,我想我回答过这样的事情,但我花了一些时间来找到它:对角线变化1在MATLAB 4维矩阵(http://*.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

您可以通过获取对角线的线性指标,并用它来形成一个新的矩阵

[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及更高版本时才有效。如果您的版本比这更老,请改用一个虚拟变量。