To mirror (i.e, to copy) the upper matrix to the lower half in matrices arranged in 3D
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
julian gaviria
el 23 de Oct. de 2023
Comentada: Matt J
el 23 de Oct. de 2023
These two lines mirror (i.e, copy) the upper matrix to the lower half in matrix M, and replace the diagonal elements of the same M with NaN values
M2=triu(M)+triu(M,1)';
%2. To replace the diagonal elements of A with NaN values
M2(eye(size(M2))==1) = nan;
How can I implement them in a 3D array? (e.g., M_3D=374x374x5). The code below does not work.
ns = size(M_3D,3);
M_3D_ = M_3D;
for s = 1:ns
thisM = M_3D(:,:,s);
thisM = triu(M_3D(:,:,s))+triu(M_3D,1)';
M_3D_(:,:,s) = thisM;
M3D_(eye(size(M_3D_(:,:,s)))==1) = nan;
end
0 comentarios
Respuesta aceptada
Matt J
el 23 de Oct. de 2023
Editada: Matt J
el 23 de Oct. de 2023
M_3D=randi(100, 4,4,3); %fake input
N=size(M_3D,1);
mask=triu(ones(N));
mask(1:N+1:end)=nan;
M_3D=M_3D.*mask;
M_3D=M_3D+pagetranspose(M_3D)
2 comentarios
Matt J
el 23 de Oct. de 2023
It may help to look at the mask,
N=8;
mask=triu(ones(N));
mask(1:N+1:end)=nan
Más respuestas (0)
Ver también
Categorías
Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!