matlab提取3D矩阵对角线的有效方法
matlab efficient way to extract diagonals of a 3D matrix
我想将一个 3D 矩阵(下面的 Sigma)的对角线提取到另一个 3D 矩阵(下面的 Sigma2)中。
Sigma = repmat(magic(4),1,1,3);
Sigma2 = nan(1,4,3);
for i=1:3
Sigma2(1,:,i) = diag(Sigma(:,:,i));
end
有没有更有效的方法?
可以。如果将 Sigma
重塑为矩阵,选择 3D 矩阵的对角线现在就是从矩阵中选择行。
Sigma3=reshape(Sigma,[],size(Sigma,3));
Selector=diag(true(size(Sigma,1),1));
Sigma2=Sigma3(Selector(:),:);
%Sigma2=permute(Sigma2,[3,1,2]) %optional last step to get a result with the same dimensions.
我想将一个 3D 矩阵(下面的 Sigma)的对角线提取到另一个 3D 矩阵(下面的 Sigma2)中。
Sigma = repmat(magic(4),1,1,3);
Sigma2 = nan(1,4,3);
for i=1:3
Sigma2(1,:,i) = diag(Sigma(:,:,i));
end
有没有更有效的方法?
可以。如果将 Sigma
重塑为矩阵,选择 3D 矩阵的对角线现在就是从矩阵中选择行。
Sigma3=reshape(Sigma,[],size(Sigma,3));
Selector=diag(true(size(Sigma,1),1));
Sigma2=Sigma3(Selector(:),:);
%Sigma2=permute(Sigma2,[3,1,2]) %optional last step to get a result with the same dimensions.