vectorization

2 Ansichten (letzte 30 Tage)
Steven
Steven am 8 Dez. 2011
hi,
is there a quick way to change the values of the diagonal of a matrix, instead of
for i = 1:length(A)
A(i,i) = 0;
end
thx
  1 Kommentar
Andrei Bobrov
Andrei Bobrov am 8 Dez. 2011
A-diag(diag(A))

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Dr. Seis
Dr. Seis am 8 Dez. 2011
If A is an NxN matrix:
A(1:N+1:N*N) = 0;
  1 Kommentar
Dr. Seis
Dr. Seis am 8 Dez. 2011
N = 10000;
A = rand(N);
tic
A(1:N+1:N*N)=0;
toc % Took 0.000532 seconds
A = rand(N);
tic
A(logical(speye(length(A)))) = 0;
toc % Took 0.001379 seconds
A = rand(N);
tic
A = A - diag(diag(A));
toc % Took 0.215796 seconds

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Sean de Wolski
Sean de Wolski am 8 Dez. 2011
One way:
A = magic(100); %sample matrix
A(logical(speye(length(A)))) = 0;
Also diag if you're building a matrix

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by