how to solve diagonal matrix of each page of a 3D vector ? pagediag?
8 次查看(过去 30 天)
显示 更早的评论
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 个评论
Matt J
2023-6-28
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.
回答(3 个)
Bruno Luong
2023-6-28
[~,n,p] = size(A);
[J,K] = ndgrid(1:n,1:p);
B = accumarray([J(:) J(:) K(:)], A(:), [n,n,p]);
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!