2013-11-25 3 views
0

나는 로컬 minimas 벡터를 가지고 있으며이 값의 대부분은 노이즈이며 중요한 값만 있습니다. 3 개의 중요한 값을 가진 벡터가 모두 0보다 작은 경우를 가정 해 봅시다. 중요한 가치와 소음 사이에는 엄청난 차이가 있습니다. 각 중요한 값의 크기도 다릅니다. 색인을 기준으로 이러한 중요 값을 오름차순으로 정렬하고 싶습니다. 예를 들어minimas 배열에서 중요한 데이터를 정렬하는 방법은 무엇입니까?

y = [-0.0002, -0.00058, -0.28, -0.0008, -0.25,-0.0006,-0.00004,-0.26] 
output = [-0.28, -0.25, -0.26, -0.0002, -0.00058,-0.0008, -0.0006,-0.00004] 

어쨌든 나는 지수를 정점으로 유지하기를 원합니다.

답변

1

y의 순서는 1/99의 차이보다 중요합니다 (원하는 경우 1/99로 조정할 수 있음).

[~,order]=sort(y+(1:length(y))/99) 
output=y(order) 

정렬 전에 벡터에 [1/99,2/99,3/99,4/99 ...] 벡터를 추가합니다. 그런 다음 수정 된 y가 정렬되는 방식 만 유지합니다. 그리고 저는 그것을 수정되지 않은 y에 적용합니다.

y가 매우 길면 작동하지 않습니다. 이를 위해서는 두 번째 제안을 반복하십시오.

[~,order]=sort(y+(1:length(y))/99) 
y=y(order) 
[~,order]=sort(y+(1:length(y))/99) 
output=y(order) 
+0

설명해주십시오. 나는 y + (1 : 길이 (y))/99의 목적을 이해할 수 없었다. – User1551892

+0

배열에 3000 개의 요소가 있고 제안 된 접근 방식이 작동하지 않습니다. – User1551892

+1

긴 버전일까요? [~, 순서] = 정렬 (둥근 (y * 100)/100 + (1 : 길이 (y)) * 1e-7) – user2987828

관련 문제