2017-03-04 5 views
1

Matlab에서 주어진 벡터 A (제발, 여기에서 찾으십시오 : https://www.dropbox.com/s/otropedwxj0lki7/A.mat?dl=0), 가장 작은 범위 (또는 표준 편차)로 n 샘플 벡터 하위 집합을 어떻게 찾을 수 있습니까?특정 기준을 충족하는 n- 샘플 벡터 하위 세트를 찾는 코드를 개선하려면 어떻게해야합니까?

저는 열의 벡터 모양을 바꿔서 각 열의 범위를 수행하고 가장 작은 것을 선택하는 등의 잠재적 인 해결책을 찾고 있습니다. 그러나 길이가 다른 다른 예제에 적용하면 모양이 잘 변형되지는 않습니다. 어떻게하면 더 쉽고 효율적으로이 일을 할 수 있을까요?

Fs = 1000; % sampling frequency 
time = round(length(A)/Fs)-1; % calculate approximated rounded total length in time 
A_reshaped = reshape(A(1:time*Fs), [], time/2); % reshape A (deleting some samples at the end) in time/2 columns 
D(1,:) = mean(A_reshaped); 
D(2,:) = range(A_reshaped); 
[~,idx] = min(D(2,:)); 
Value = D(1,idx); 

어떤 도움을 많이 주시면 감사하겠습니다.

답변

0

최소 범위의 n 샘플을 찾으려면 벡터를 정렬하고 정렬 된 벡터의 첫 번째 섹션을 마지막 섹션에서 뺍니다. 그런 다음 최소값의 인덱스를 사용하여 n 샘플을 찾습니다.

n=4 
a= rand(1,10); 
s= sort(a); 
[~,I]=min(s(n:end)-s(1:end-n+1)) 
result = s(I:I+n-1)