remove rows by pick the min value in another column
조회 수: 1 (최근 30일)
이전 댓글 표시
Can you help?
On below matrix, for same X and Y, pick smallest Z, then put into a new matrix by removing the rows? and also give the row number for which row is kept.
X Y Z
60,-40,1.1
55,-40,3.1
55,-45,4.5
60,-45,5.3
60,-40,7
55,-40,8.4
55,-45,9.8
60,-40,11.2
60,-45,12.6
55,-40,14
55,-45,15.4
60,-45,16.8
60,-40,18.2
60,-45,19.6
55,-40,21
60,-40,22.4
55,-45,23.8
60,-45,25.2
55,-40,26.6
55,-45,28
채택된 답변
Andrei Bobrov
2016년 4월 15일
편집: Andrei Bobrov
2016년 4월 15일
x=[55,-45,9.8
60,-40,11.2
60,-45,12.6
55,-40,14
55,-45,15.4
60,-45,16.8
60,-40,18.2
60,-45,19.6
55,-40,21
60,-40,22.4
55,-45,23.8
60,-45,25.2
55,-40,26.6
55,-45,28]
[a,~,c] = unique(x(:,1:2),'rows');
n = size(a,1);
valuemin = zeros(n,4);
for ii = 1:n
i0 = find(c == ii);
[valuemin(ii,3),i1] = min(x(i0,end));
valuemin(ii,[1:2,4]) = [a(ii,:),i0(i1)];
end
or
[a,~,c] = unique(x(:,1:2),'rows');
idx = accumarray(c,(1:size(x,1))',[],@(y)y(min(x(y,3))==x(y,3)));
valuemin = [a,x(idx,3),idx];
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!