2016-05-20 121 views
2

我有containining 200個散步速度的矢量:計算直方圖

a = 50; 
b = 100; 
speed = (b-a).*rand(200,1) + a; 

和contaning的每個的步行的步數的另一種載體:

a = 8; 
b = 100; 
steps = (b-a).*rand(200,1) + a; 

我想創建一個直方圖,其中x軸是速度,y軸是每個速度步長的總和。

我要做的就是下面的,但我想還有一個更優雅的方式來做到這一點:

unique_speed = unique(speed); 
y_unique_speed = zeros(size(unique_speed)); 
for i = 1 : numel(unique_speed) 

    speed_idx = unique_speed(i); 
    idx = speed==speed_idx ; 
    y_unique_speed (i) = sum(steps (idx)); 

end 
+0

有了你給這裏的代碼,這是非常不可能的2'speed'值將是相等的。它們是否在你的實際代碼中以相同的方式生成? – BillBokeey

+0

不,我有真實數據..... – gabboshow

+0

類似於[this](http://stackoverflow.com/a/18640944/2586922)? –

回答

1

首先,您需要將您的speed離散化變量。與其他答案不同的是,以下允許你選擇任意步長,例如我已選擇1.5。請注意,最後的邊緣邊緣應嚴格大於最大數據點,因此我使用了max(speed)+binstep。然後,您可以使用histc來確定每個對落入哪個箱,並使用accumarray來確定每個箱中的總步數。最後,使用bar進行繪圖。

binstep = 1.5; 
binranges = (min(speed):binstep:max(speed)+binstep)'; 
[~, ind] = histc(speed, binranges); 
bincounts = accumarray(ind, steps, size(binranges)); 
hFig = figure(); axh = axes('Parent', hFig); hold(axh, 'all'); grid(axh, 'on'); 
bar(axh, binranges, bincounts); axis(axh, 'tight'); 

enter image description here

0

首先,倉速度數據爲離散值:

sspeed = ceil(speed); 

,然後積累每個bin的各種步長大小:

numsteps = accumarray(sspeed, steps); 
plot(numsteps)