vectorization

1 view (last 30 days)
Steven
Steven on 8 Dec 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 Comment
Andrei Bobrov
Andrei Bobrov on 8 Dec 2011
A-diag(diag(A))

Sign in to comment.

Accepted Answer

Dr. Seis
Dr. Seis on 8 Dec 2011
If A is an NxN matrix:
A(1:N+1:N*N) = 0;
  1 Comment
Dr. Seis
Dr. Seis on 8 Dec 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

Sign in to comment.

More Answers (1)

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

Categories

Find more on Creating and Concatenating 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!