Which MATLAB function can remove the diagonal elements of a NxN matrix
37 次查看(过去 30 天)
显示 更早的评论
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 个评论
Kenneth Eaton
2011-2-1
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.
采纳的回答
Matt Fig
2011-2-1
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 个评论
James Tursa
2013-1-30
编辑:James Tursa
2013-1-30
Another variation using linear indexing:
m = size(A,1)+1;
A(1:m:end) = [];
A = reshape(A,4,3); % or whatever
更多回答(3 个)
Paulo Silva
2011-2-1
b=triu(a)
b=b(:,2:end)
c=tril(a)
c=c(:,1:end-1)
b+c
1 个评论
ahahahaaron
2013-1-30
this one produces an overlap and doesn't really produce what the other guy wants.
oren Tadmor
2014-6-12
编辑:oren Tadmor
2014-6-12
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
0 个评论
Youssef Khmou
2013-1-31
编辑:Youssef Khmou
2013-1-31
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 个评论
Youssef Khmou
2013-1-31
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.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!