Which MATLAB function can remove the diagonal elements of a NxN matrix

Do you know which MATLAB function can do the following work: to remove the diagonal elements of a (N+1)x(N+1) matrix to generate a new NxN matrix.
For say, the old matrix is
[ 0 1 2 3
1 0 2 3
1 2 0 3
1 2 3 0 ]
the generated new matrix is
[ 1 2 3
1 2 3
1 2 3 ]

1 Comment

It's not clear what you are asking. In your example, removing the main diagonal still leaves you with (N+1)*N elements, too many to make an N-by-N matrix. You would have to remove the main diagonal plus either the first superdiagonal or the first subdiagonal to end up with N*N elements.

Sign in to comment.

 Accepted Answer

Your example doesn't add up, as Kenneth mentioned. However, in general you could do something like this:
A = [ 0 1 2 3
1 0 2 3
1 2 0 3
1 2 3 0 ];
A(logical(eye(size(A)))) = []; % Or A = A(~eye(size(A)))
A = reshape(A,4,3); % Or 3,4 or whatever.

2 Comments

Another variation using linear indexing:
m = size(A,1)+1;
A(1:m:end) = [];
A = reshape(A,4,3); % or whatever

Sign in to comment.

More Answers (3)

b=triu(a)
b=b(:,2:end)
c=tril(a)
c=c(:,1:end-1)
b+c

1 Comment

this one produces an overlap and doesn't really produce what the other guy wants.

Sign in to comment.

remove_diagonal = @(t)reshape(t(~diag(ones(1,size(t, 1)))), size(t)-[1 0]);
So :
>> m = magic(5)
m =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
ans =
23 24 1 8 15
4 6 7 14 16
10 12 19 20 22
11 18 25 2 3
hi, Jinlong Wei
According to your example : Here is a function :
function Z=diagrem(X)
N=size(X);
Z=X;
if N(1)~=N(2)
error('Matrix is not square');
end
for x=1:N(1)
Z(x,x)=0;
end
for y=1:N(1)-1
Z(y,y+1)=0;
end
Z(Z==0)=[];
Z=reshape(Z,N(1)-1,N(2)-1);
It produces exactly your example ,it removes R(i,i) and in the second loop it removes R(j,j+1) with 1<=i<=n , 1<=j<n .

1 Comment

In case your matrix already contains zeros, then change the code by giving Z(x,x) and Z(y,y+1) a NaN value per example or something else then remove them.

Sign in to comment.

Categories

Asked:

on 1 Feb 2011

Edited:

on 12 Jun 2014

Community Treasure Hunt

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

Start Hunting!