Eliminated zero value in the matrix.

조회 수: 1 (최근 30일)
Francesco
Francesco 2014년 2월 21일
댓글: Francesco 2014년 2월 22일
I have this variable formatted as following:
>> dist
dist =
0 7.5000 15.0000 16.7705 21.2132 16.7705 15.0000 7.5000
7.5000 0 7.5000 10.6066 16.7705 15.0000 16.7705 10.6066
15.0000 7.5000 0 7.5000 15.0000 16.7705 21.2132 16.7705
16.7705 10.6066 7.5000 0 7.5000 10.6066 16.7705 15.0000
21.2132 16.7705 15.0000 7.5000 0 7.5000 15.0000 16.7705
16.7705 15.0000 16.7705 10.6066 7.5000 0 7.5000 10.6066
15.0000 16.7705 21.2132 16.7705 15.0000 7.5000 0 7.5000
7.5000 10.6066 16.7705 15.0000 16.7705 10.6066 7.5000 0
I want to obtain a 8x7 array because I want to eliminate all the 0 element rows by rows. The structure of the files is always the same with the 0 value on the main diagonal. How can I do this?

채택된 답변

Matt Tearle
Matt Tearle 2014년 2월 21일
Personally, I'd question whether this is a great idea. A distance matrix is supposed to be square and symmetric, with dist(j,k) representing the distance between points j and k. Removing those diagonal elements destroys that structure, and I don't see what it gains you. But if there's a good reason to go ahead, you could do:
n = size(dist,1);
dist(1:(n+1):end) = [];
dist = reshape(dist,n-1,n);
  댓글 수: 4
Matt Tearle
Matt Tearle 2014년 2월 21일
@Walter: true, I shifted down instead of across. Add a transpose, I guess :) The 0 on the diagonal is a good point. But in that case, my personal preference would be to fill the diagonal with NaNs:
n = size(dist,1);
dist(1:(n+1):end) = NaN
min(dist)
(But I guess there are other cases where that would be annoying, too...)
@Francesco: I've added a comment on that other question about how my code works. But, no, I don't use the distances for that.
That said, if you find pairwise distances to be useful, and you have Statistics Toolbox, there's a function to do it for you: pdist. If you want the matrix form, use squareform as well:
coords = rand(8,2); % column 1 is x, column 2 is y
dist = squareform(pdist(coords));
Francesco
Francesco 2014년 2월 22일
Matt the problem is that I want to obtain a 8x7 matrix. I have to eliminate the zero element rows by rows.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Chad Greene
Chad Greene 2014년 2월 21일
dist2 = repmat(dist(~eye(size(dist))),1,7)

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by