从矩阵中提取块对角线

时间:2015-12-08 00:41:53

标签: matlab matrix

我有一个由nxn矩阵组成的njxnj矩阵。我想提取nxn矩阵的对角j块。即我想提取对角线(对于n = 2,j = 4):

enter image description here

最有效的方法是什么?

2 个答案:

答案 0 :(得分:4)

要索引元素,可以使用blkdiag创建相应的蒙版。

%your parameters
n=2
j=4
%some example matrix
M=magic(n*j);
%create the input for blkdiag, j matrices of size n
h=repmat({true(n)},j,1)
%use blkdiag to select the elements
M(logical(blkdiag(h{:})))

答案 1 :(得分:1)

对于大j,@ Daniel的答案变慢。相反,我建议使用块对角线的线性索引。

    n=2;
    j=4;
    %some example matrix
    M=magic(n*j);
    linIndices = (0:n*((n*j)+1):n*((n*j)+1)*(j-1))+reshape((1:n)'+n*j*(0:n-1),[],1);
    newM = reshape(M(linIndices),n,n,[]);