What is a function that takes the diagonal of a matrix (N) and converts the diagonal to all zeros.

2 Ansichten (letzte 30 Tage)
Ex.
>> m=[1 2 3; 4 5 6;1 2 3]
m =
1 2 3
4 5 6
1 2 3
>> m=diagzero (m)
m =
0 2 3
4 0 6
1 2 0

Akzeptierte Antwort

Youssef  Khmou
Youssef Khmou am 9 Apr. 2013
try :
function Y=diagzero(X)
N=size(X);
if N(1)~=N(2)
error(' Matrix not square');
end
Y=X;
for x=1:N(1)
Y(x,x)=0;
end

Weitere Antworten (4)

James Tursa
James Tursa am 10 Apr. 2013
Bearbeitet: James Tursa am 10 Apr. 2013
Another method if you know m is square:
r = size(m,1) + 1;
m(1:r:end) = 0;
If you don't know if m is square or not you could do this:
r = size(m,1);
n = min(numel(m),r*r);
m(1:r+1:n) = 0;

Andrei Bobrov
Andrei Bobrov am 10 Apr. 2013
m(eye(size(m))>0) = 0;

Azzi Abdelmalek
Azzi Abdelmalek am 9 Apr. 2013
Bearbeitet: Azzi Abdelmalek am 9 Apr. 2013
ii=1:size(m,1);
m(sub2ind(size(m),ii,ii))=0

Jonathan Epperl
Jonathan Epperl am 10 Apr. 2013
Bearbeitet: Jonathan Epperl am 10 Apr. 2013
Assuming m is square (because else you'd have to define the diagonal for me):
diagzero = @(m) m - diag(diag(m));

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by