how set diagonal =1 in matrix tridimensional a(:,:,:)
4 views (last 30 days)
Show older comments
hi,
how can i set=1 the diagonal of the multidimensional matrix
size(COR)
ans =
8 8 188
8 Comments
Bruno Luong
on 20 Jul 2023
Edited: Bruno Luong
on 20 Jul 2023
Here is the timings of three methods
COR = rand(8,8,188);
timeit(@() methodfor(COR)) % Aldo
timeit(@() methodlogical(COR)) % Walter
timeit(@() methodindex(COR)) % Bruno
function COR = methodfor(COR)
[r,c,d]=size(COR);
for i=1:d
for x=1:r
COR(x,x,i)=1;
end
end
end
function COR = methodlogical(COR)
M = repmat(logical(eye(size(COR,1),size(COR,2))),1,1,size(COR,3));
COR(M) = 1;
end
function COR = methodindex(COR)
[b,c,d] = size(COR);
COR(1+(b+1)*(0:min(b,c)-1)'+b*c*(0:d-1)) = 1;
end
Answers (3)
Geovane Gomes
on 19 Jul 2023
Maybe using eye and repmat
COR = repmat(eye(8),1,1,188);
size(COR)
3 Comments
Walter Roberson
on 20 Jul 2023
M = repmat(logical(eye(size(COR,1),sie(COR,2))),1,1,size(COR,3));
COR(M) = 1;
Bruno Luong
on 20 Jul 2023
% Generate dummy test data
a = 0.01*rand(2,3,4)
[b,c,d] = size(a);
[I,K] = ndgrid(1:min(b,c),1:d);
a(sub2ind([b,c,d],I,I,K)) = 1;
a
0 Comments
Bruno Luong
on 20 Jul 2023
% Generate dummy test data
a = 0.01*rand(2,3,4)
[b,c,d] = size(a);
a(1+(b+1)*(0:min(b,c)-1)'+b*c*(0:d-1)) = 1;
a
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!