How do you extract diagonal elements of submatrix matrix?

4 views (last 30 days)
Hi, need help:
I have a (nxn) square matrix A. I then created submatrices of (kxk) within matrix A. How do I extract only the diagonal (kxk) submatrices into a separate vector? The command diag(A) does not work; this is maybe because of the submatrices elements that I created. Please advise Thanks!

Accepted Answer

Ameer Hamza
Ameer Hamza on 2 Dec 2020
Are the submatrices in cell array? For example, try something like this
n = 9;
A = rand(n);
k = 3;
B = mat2cell(A, k*ones(1,n/k), k*ones(1,n/k));
diag_all = cellfun(@diag, B, 'uni', 0);
  10 Comments
BooDee
BooDee on 11 Dec 2020
Hey Ameer,
Thanks for the response. I've done the codes you suggested above but to no avail. It keeps giving me the following errors:
Error using zeros
Out of memory. Type HELP MEMORY for your options.
Error in blkdiag (line 43)
y = zeros(p1(end),m1(end),outclass); %Preallocate
I tried just simplifying it with:
diag_B = blkdiag(B{:}) AND diag_B = diag(B);
But it still won't work.
Is there any other solution. I can't imagine doing this manually when working with a 2464x2464 matrix.
Thanks Ameer. Anything helps.
Vishnu Pradeep
Vishnu Pradeep on 2 Dec 2021
Hey guys,
What does the 'uni' argument pertain to?
Couldnt find anything on the web other than the name-value pair 'UniformOutput'. Is this the same?
Thanks!

Sign in to comment.

More Answers (0)

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!