Collect double values of a matrix
이전 댓글 표시
Hi,
I have got a question. I have a matrix with three columns (X,Y,Z coordinates) and nearly 60000 rows. Now, I would like to compare the X and Z values of all 60000 rows. All rows whose X and Z values only occur once should be deleted, only the rows whose X and Z value occur twice or more should be regarded. Next, the rows with the equal X and Z value should be compared and the row with the higher Y value should be written into a new matrix.
I thought about using a loop for the search of the rows with equal X and Z values but the computing time is quite high, is there a better way? And how do I define the "do"?
for k = 1:end
for m = k+1:end
if A(k,1) == A(m,1) && A(k,3) ==A(m,3)
do something
end
end
end
I haven't thought about the loop for the search of the higher Y value, yet.
Yours,
Tobias
채택된 답변
추가 답변 (2개)
Martin C.
2019년 10월 8일
0 개 추천
hmm well to count occurences you could somehow use a hashmap
containers.Map in matlab. that would be efficient.
Turlough Hughes
2019년 10월 8일
편집: Turlough Hughes
2019년 10월 9일
Ok Following your comment I've edited my answer:
I would first find rows which have equal X and Z values.
c=1;
for ii=1:size(A,1)
if A(ii,1)==A(ii,3)
id_s(c)=ii;
c=c+1;
end
end
B=A(id_s,:);
Rows in A with equal X and Z value and are assigned to B.
To ensure a given X (and hence a given Z) of a row is repeated in another row I find the rows where this is not the case and delete them.
[~,ix] = unique(B(:,1)); % so B(ix,1) includes all values in B(:,1) without repeating any.
Xtw=B(:,1);
Xtw(ix)=[]; % Xtw - includes all values in X that occurred two or more times.
[~,i1x]=setdiff(B(:,1),Xtw); % Gets index for rows in B where the x value is not repeated elsewhere.
B(i1x,:)=[];
카테고리
도움말 센터 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!