2017-11-06 16 views
1

행렬의 일부인 열 벡터에서 숫자 집합의 최소값을 찾으려고합니다. I 매트릭스있는 경우보다 구체적 Matlab의 열 벡터에서 숫자 집합의 최소값 찾기

7 2 3 8 2.3 
10 4 5 12 1.1 
15 5 6 8 0.5 

난에 기초하여 행렬을 나누어 생각해, I는 다음과 같이 출력 싶습니다 그러면

1 2 3 4 2.7 
7 2 3 8 2.3 
5 2 3 9 12.5 
10 4 5 12 1.1 
11 4 5 13 5.6 
14 5 6 7 1.2 
15 5 6 8 0.5 
16 5 6 9 3.4 
17 5 6 12 6.8 

다음과 같이 열 (2, 3)인지 동일하고 모든 하위 행렬에서 열 5의 최소값을 찾았지만 효율적으로 구현할 수 없었습니다. (편집 : 내가해야 할 노력은 무엇, 내가 먼저, 나는 다음과 같이 행을 반복의 발생 수를 얻을 수 독특한을 사용) 행렬의 2 층과 3 열 (예를 들어,을 분리

 A_dup = A(:,2:3) 
     [A_uni,~,u_id] = unique(A_dup,'rows') 
     num_occur = histc(u_id, unique(u_id)) 

벡터 'num_occur'는 행렬 A를 부분 행렬로 나눌 방법을 알려줄 것입니다. 그다지 많지는 않지만 이것 이후로 붙어 있습니다.)

더 좋은 방법이 있다면, 나는 기쁠 것입니다. 그걸 알기 위해서.

답변

1

sortrows을 사용하여 5 번째 열의 요소를 기반으로 행렬을 정렬하고 정렬 된 요소의 색인을 가져옵니다. 새 행렬의 두 번째 및 세 번째 열의 unique 행의 행 첨자를 찾습니다. 이 행 첨자를 이전에 발견 된 색인과 함께 사용하여 행 첨자가 원래 행렬에서 유지되도록합니다. 주문을 유지하기 위해 Sort. 정렬 된 새 행 첨자를 사용하여 필요한 결과를 얻습니다.

[req, idxA] = sortrows(A, 5);   
[~, idxtmpA] = unique(req(:,2:3), 'rows'); 
req = A(sort(idxA(idxtmpA)), :);