2013-10-31 48 views
0

我有兩個數組的大型數據集,如xy。這些陣列的大小超過100萬個數據點。是否有一種簡單的方法可以對這些點中的僅2000個進行散點圖分析,但它是整個集合的代表?Plot大型數據集代表性示例 - Matlab

我正在考慮創建另一個數組r; r = max(x)*rand(2000,1)獲得x數組的隨機樣本。是否有方法可以找到r中的值等於或接近x中的值?他們不必位於同一個索引位置,而是在整個矩陣中。我們可以然後繪製y值與那些發現x值相關r

我只是不知道如何編碼此。有沒有比這更好的方法?

回答

0

我不知道這個程序將如何代表是您的數據,因爲它取決於你的數據的模樣,但你肯定可以編寫了類似的東西。找到最接近的值的最簡單的方法是取的min之間的差異測試向量和您的期望值。

r = max(x)*rand(2000,1); 
for i = 1:length(r) 
    [~,z(i)] = min(abs(x-r(i))); 
end 
plot(x(z),y(z),'.') 

注意,在min[~,z(i)]意味着我們要爲最小值的索引存儲在矢量z

你也可以嘗試像移動平均線,看到這段視頻:http://blogs.mathworks.com/videos/2012/04/17/using-convolution-to-smooth-data-with-a-moving-average-in-matlab/

或者你可以繪製每n點,喜歡的事(我沒有測試過這一點,所以沒有保證):

n = 1000; 
plot(x(1:n:end),y(1:n:end)) 

或者,如果你知道的點數你想(再次,未經測試):

npoints = 2000; 
interval = round(length(x)/npoints); 
plot(x(1:interval:end),y(1:interval:end)) 
0

也許最簡單的方法是使用round函數並將其轉換爲整數,然後將它們進行比較。例如,如果你想找到的是內r值的0.1這點,先乘以10的值,然後輪:

r = max(x) * round(2000,1); 
rr = round(r/0.1); 
xx = round(x/0.1); 
inRR = ismember(xx, rr) 
plot(x(inRR), y(inRR)); 

有0.1分,有相同的整數值的任何值在0.1以內。

ismemberxx每個值返回一個1如果該值是在rr,否則0。這些可用於選擇要繪製的條目。