Any suggestion to replace the diagonal values of matrices in a 3D array?
Show older comments
Any suggestion to replace the diagonal values of matrices in a 3D array?
in case1 to "0"
in case1 to "NaN"
e.g. for NaN
M_3D=randi(100, 4,4,3); %fake input
N=size(M_3D,1);
mask=1:N+1:end)=nan;
M_3D=M_3D.*mask;
4 Comments
What do you mean by "diagonal" in this context? If I had:
A = reshape(1:27, [3 3 3])
Do you want to set elements 1, 5, 9, 10, 14, 18, 19, 23, and 27 to 0? This would be setting the elements along the diagonal of each page of the 3-d array to 0.
Or do you just want to set elements 1, 14, and 27 to 0? This would be setting elements along a line "connecting opposite corners" (or the equivalent if your array isn't a cube) to 0.
Stephen23
on 6 Nov 2023
@Steven Lord: out of curiosity, how would you do a "connecting opposite corners" for an arbitrary number of dimensions?
One possibility is points at subscripts n*ones(1, ndimsOfArray) for n = 1:min(size(theArray)). Once you reach any "edge" of the array you stop.
So for an array of size (4, 3, 5) those would be the elements at subscripts (1, 1, 1), (2, 2, 2), and (3, 3, 3). That matches conceptually the behavior of the diag function on non-square matrices.
A = reshape(1:12, 3, 4)
diag(A) % (1, 1), (2, 2), and (3, 3) since min(size(A)) is 3.
julian gaviria
on 6 Nov 2023
Accepted Answer
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!