2013-08-27 5 views
0

다음 두 개의 열이 있습니다.데이터의 평균 실행 또는 데이터의 Binning

ABC = 

4.1103 25.5932 
5.0852 31.2679 
6.0021 15.9020 
5.8495 21.4804 
4.3245 19.9674 
5.9378 38.3452 
6.9460 8.8233 
7.4568 44.7429 
5.7358 32.7608 
5.3510 35.2645 
5.1657 54.6566 
5.1381 44.1870 
4.1566 101.8947 
5.7310 -3.0565 
5.5496 28.3637 
4.5672 -1.7736 
4.5805 11.8384 
4.7948 33.7640 
3.9901 6.0607 
4.4203 17.7308 
4.2712 -1.5834 
4.8808 -2.3123 
5.9004 -0.4623 
5.3929 1.1477 
5.6594 6.9741 
5.5114 11.3982 
5.4715 5.9189 
5.0021 6.2561 
4.1576 10.3207 
6.1025 3.4654 
3.9960 6.6892 
5.6938 3.8429 
5.2416 7.7513 
7.0922 2.6871 
5.3277 14.0617 
6.1350 4.0316 
6.0211 -20.3587 
6.7399 14.0224 
5.0818 102.6360 
5.6444 24.3167 
6.2542 19.8522 
6.2862 24.3430 
5.6452 -6.4020 
5.4561 14.7813 
4.7934 9.4639 
3.8523 32.0766 
3.9878 8.5313 
4.5232 42.0309 
4.2489 -12.0325 
6.0413 -5.5464 
4.9334 -3.2520 
4.1349 20.9038 
4.2329 20.6303 
4.2009 31.8840 
4.0624 48.5402 
4.7674 28.6595 
4.0767 4.7767 
4.0971 34.8460 
3.8442 24.0209 
5.2471 38.8815 
6.0241 59.3785 
6.9743 6.5027 
7.8732 4.5422 
4.3094 68.4340 
4.5601 -4.2946 
4.6140 109.4510 
4.5862 71.8387 
5.2210 66.1310 
4.3835 32.7592 
6.1432 36.3832 
5.4624 13.7891 
5.2129 40.1301 
3.8987 67.2705 
6.6328 15.0286 
8.0786 -7.3078 
4.8968 -6.7754 
4.1200 4.5333 
4.1098 -3.3204 
4.0373 26.4890 
3.8467 48.8121 
7.7795 -2.3606 
6.9553 21.3609 
6.2635 24.4985 
6.1518 -1.4200 
4.9115 11.5784 
5.5908 13.1351 
7.0117 -2.8297 
5.2193 38.6937 
6.0786 16.9453 
6.8229 14.0907 
8.0385 13.6228 
8.6596 -1.4478 
6.3257 8.0361 
6.9223 -14.2179 
3.8337 15.5773 
4.0039 -24.1494 
4.6332 17.9308 
6.3684 11.3398 
5.8592 4.0367 
6.9040 12.1495 
7.8524 -0.0432 
8.3545 10.8865 
9.3946 20.4614 
4.3015 25.9674 
4.4782 21.9045 
4.1994 39.2286 
4.3499 22.1004 
4.3652 33.6220 
4.2026 -5.8153 
5.1330 6.4996 
5.3118 33.7835 
4.2002 -3.1917 
3.8285 32.1016 
3.9485 21.6358 
3.8688 21.7830 
4.0494 24.7914 
4.0869 10.6577 
4.6699 8.4756 
5.1199 11.1885 
5.1831 8.6163 
4.5560 8.2806 
4.4886 4.8017 
4.5618 5.9434 
4.1135 12.8942 
4.1377 22.1423 

나는 동등한 번호를 사용했다. 'x'및 해당 평균 빈 값 'yy'의 빈 수를 표시합니다.

x=ABC(:,1); 
y=ABC(:,2); 
counter=1 
    for i=min(x):0.3:max(x)  
     bin= x>i & x<= i+0.3;  
     xbin(counter,1) = mean(x(bin)); 
     yy(counter,1) = mean(y(bin)); 
     counter   = counter+1 
    end 

plot(x,y,'ro'); hold on 
plot(xbin,yy,'bo-'); 

아래와 같이 '함은'(루프 참조)을 넣고가 'X'로부터 'xbin'를 포함 아웃 부탁해 데이터 'YY'의 평균이 'X'의 특정 범위에 대해 정의된다 'y'는 'xbin'에 해당합니다. 나는 평균값 'yy'에 대해 우려를 가지고있다. 동등한 번호. 데이터 포인트의 'bin'에 'y'의 데이터 포인트가 충분하지 않은 경우 평균값 'yy'는 NaN이어야합니다. 이와 관련하여 누군가 도와주십시오. 감사합니다

+0

histc 기능을 살펴보아야합니다. http://www.mathworks.com/help/matlab/ref/histc.html – PeterM

답변

1

for -loop을 반복 할 때마다 bin에있는 1의 수를 확인하십시오.

x=ABC(:,1); 
y=ABC(:,2); 
counter=1; 

nbinmin = 5; % this is the threshold 

for i=min(x):0.3:max(x) 
    bin= x>i & x<= i+0.3; 
    xbin(counter,1) = mean(x(bin)); 

    % check if the number of 1s in bin is less than the threshold 
    if length(bin(bin==1)) < nbinmin 
     yy(counter,1) = NaN; 
    else 
     yy(counter,1) = mean(y(bin)); 
    end 
    counter = counter+1; 
end 
+0

@Schorch, 고맙습니다. 이것이 내가 원하는 것입니다. 내 문제에 적용하고 잘 작동하지만 다음과 같은 오류가 있습니다. 나는 matlab에 좋지 않다. 문제가 될 수있는 것이 무엇인지 말해 줄 수 있니? 이 기능은 '임계 값'없이 작동하고 '임계 값'은 다음과 같이 오류가 발생합니다. 이것은 'x'데이터의 NaN 때문입니다. ''xbin (NaN, 1)에 액세스하려고 시도했습니다. index는 양의 정수 또는 논리적이어야합니다. testingSS에서 RO2_Original (줄 117) xbin (counter, 1) = nanmean (x (bin)); '' – Umar

+0

@user1949014로 테스트 할 때 오류가 발생합니다. 먼저 x = ABC (: ,1); y = ABC (:, 2); x = x (~ isnan (ABC (:, 1))); y = y (~ isnan (ABC (:, 1)));'두 isnan 경우 모두에서 첫 번째 열을 사용해야합니다. – Schorsch

1

문제는 완전히 명확하지 않습니다하지만 당신은 히스토그램 기능, hist를 사용하여 시도했다 : 그 숫자가 특정 임계 값 이하인 경우, NaNyy를 할당? 당신이 histc 보면, 여기에 입력 빈 센터를 지정, 대신 쓰레기통의 가장자리를 정의 할 수 있습니다 당신

% choose the bin locations 
xcenters = min(x):0.3:max(x); 

% compute counts in each bin 
[counts, ctrs] = hist(y, xcenters); 

% set any with too few samples to NaN 
count_min = 3; 
counts(counts < count_min) = NaN; 

% plot -- either as a histogram, 
figure(1) 
bar(ctrs, counts) 
%or as a line plot (note that the line won't join up if too many NaN segments) 
figure(2) 
plot(ctrs, counts) 

을 위해 많은 일을 할 수있는 것 같다.

1

기본적으로 histogram with non-uniform bins 또는 의 히스토그램 (균수가)을 찾고 있습니다.

불균일 히스토그램 간단한 경우에는 (또한 N = ck 지정하여 비율을 설정할 수있는) 각 빈은 샘플 N/k있는 것, 즉 xN 값을 정렬 k 빈들로 정렬 벡터를 분리하는 것 .

범위 도메인 x의 선형 간격 대신, 정렬 된 벡터의 선형 분할 (따라서 원래 범위의 비선형, 비 균등 분리)을 수행합니다. 귀하의 경우에는

그 결과는 다음과 같습니다

[sortedX, indeX] = sort(x); 
nVals = length(x); % N 
nBins = nVals/10; % k = N/c 

% linear split of the sorted vector 
stepX = (1:nVals/nBins:nVals); 
if stepX(end)~=nVals, stepX = [stepX nVals+1]; end 

% counting and bining on the indexed vector 
for i = 1 : length(stepX)-1  
    bin = indeX(stepX(i):stepX(i+1)-1); 
    xbin(i,1) = mean(x(bin)); 
    yy(i,1) = mean(y(bin)); 

end 

당신은 빈 i에서 최대 사이의 중간 점을 사용하여 최소의 수 (히스토그램의 즉 가장자리)을 실제 범위를 계산하려면 빈 i+1. 원래 (선형) 범위 인 반면

rangeX = [min(x) maxX(1:end-1) + (minX(2:end) - maxX(1:end-1))/2 max(x)]; 

:

rangeX_OP = min(x):0.3:max(x); 

% calculate the range 
maxX(i) = max(x(bin)); 
minX(i) = min(x(bin)); 

원하는 (비선형) 범위는 다음입니다 : 당신은 당신의 루프에서 다음과 같이 뭔가를 추가 할 수 있습니다

histc을 사용하여 균등 카운트 (rangeX)와 같지 않음 (rangeX_OP)을 확인할 수 있습니다. 이것은 카운트가 보이는 방식입니다 (임의의 x과 비슷한 범위이며 빈당 c = 10 카운트).상단은 선형 간격이며, 범위가이면 비선형입니다.

enter image description here

관련 문제