how set diagonal =1 in matrix tridimensional a(:,:,:)
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
hi,
how can i set=1 the diagonal of the multidimensional matrix
size(COR)
ans =
8 8 188
8 commentaires
Bruno Luong
le 20 Juil 2023
Modifié(e) : Bruno Luong
le 20 Juil 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
Réponses (3)
Geovane Gomes
le 19 Juil 2023
Maybe using eye and repmat
COR = repmat(eye(8),1,1,188);
size(COR)
3 commentaires
Walter Roberson
le 20 Juil 2023
M = repmat(logical(eye(size(COR,1),sie(COR,2))),1,1,size(COR,3));
COR(M) = 1;
Bruno Luong
le 20 Juil 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 commentaires
Bruno Luong
le 20 Juil 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 commentaires
Voir également
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!