2013-05-13 23 views
0

值的標題可能會稍顯混亂,但我想要做的是以下幾點:總結的功能,其輸入是在一定的時間間隔,MATLAB

我有功能的輸入X,T,輸出Y(即ÿ = F(X,t))的,和一組範圍XR,TR和我想要做

v = zeros(1,length(xr)-1) 
for kk=1:(length(xr)-1) 
    ix = x >= xr(kk) & x < xr(kk+1) & t >= tr(kk) & t < tr(kk+1) 
    v(kk) = sum(y(ix)); 
end 

這是非常慢的,而histc,這做幾乎是相同的(除了它求和項的數目在間隔而不是功能輸出)是非常快的。這如何更快地實施?我嘗試使用arrayfun,但這隻會使速度提高25%。

感謝,

+0

'x'和'xr'的典型長度是多少? – 2013-05-13 12:14:52

+0

xr〜2000個元素,x,y 1 500 000個元素 – thorsan 2013-05-13 12:38:42

回答

1

如果使用histc有兩個輸出參數,第二輸出將給您爲每個數據項區號碼。您可以使用bin號碼來總結屬於每個bin的條目,例如,使用bsxfunaccumarray

[val, id] = histc(x, xr); 

v = accumarray(id(:), y(:)); 
+0

嗨, 感謝您的回答,但這可以做得更一般嗎?我實際想要的是(我的數據是通過兩個值進行參數設置的) 對於kk = 1,v =零(1,長度(xr)-1) 對於kk = 1:(長度(xr)-1) ix = x> = xr (kk)&x = tr(kk)&t <= tr(kk + 1) v(kk)= sum(y(ix)); 結束 – thorsan 2013-05-13 12:35:49

+1

@ user2090149我認爲這個答案實際上是做你想做的,試試看。 – 2013-05-13 12:45:44

+0

@ user2090149你知道你的請求不是泛化,而是一個完全不同的問題嗎?由於我懷疑'histc'可以同時使用兩個不同的'邊緣'參數,我的答案可能不是這個請求的有效解決方案。 – 2013-05-13 12:47:57