how to solve diagonal matrix of each page of a 3D vector ? pagediag?
    18 views (last 30 days)
  
       Show older comments
    
There is a 3D vector A, it has 100 pages, each page is a 1×20 vector. I want to solve diagonal matrix of each 1×20 vector.  
A=rand(1,20,100);
for k=1:100
    B(:,:,k)=diag(A(:,:,k));
end
B is a 20×20×100 matrix.
I'm trying to vectorize this expression, is there a matlab function maybe called 'pagediag'  that can solve B=pagediag(A) ?
1 Comment
  Matt J
      
      
 on 28 Jun 2023
				I am concerned about why you think you need a pagediag.If you plan to use it in conjunction with pagemtimes to scale the rows or columns of a stack of matrices, it's the wrong approach. 
Answers (3)
  Bruno Luong
      
      
 on 28 Jun 2023
        [~,n,p] = size(A);
[J,K] = ndgrid(1:n,1:p);
B = accumarray([J(:) J(:) K(:)], A(:), [n,n,p]);
0 Comments
See Also
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!