Plot大型数据集的代表性样本 - Matlab

时间:2013-10-31 12:46:56

标签: arrays matlab sample

我有一个包含两个数组的大型数据集,比如xy。这些阵列的大小超过100万个数据点。是否有一种简单的方法可以对这些点中的2000个点进行散点图,但是它是否能代表整个集合?

我正在考虑创建另一个数组r; r = max(x)*rand(2000,1)获取x数组的随机样本。有没有办法找到r中的值等于或接近x中的值的位置?它们不必位于相同的索引位置,而是整个矩阵。然后,我们可以根据y

绘制与找到的x值相关联的r

我只是不确定如何编码。有没有比这样做更好的方法?

2 个答案:

答案 0 :(得分:0)

我不确定这个程序对你的数据有多大的代表性,因为它取决于你的数据是什么样的,但你当然可以编写类似的东西。找到最接近值的最简单方法是获取测试向量与所需值之差的abs 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),'.')

请注意,[~,z(i)]行中的min表示我们希望将最小值的索引存储在向量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))

答案 1 :(得分: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之内。

ismember1的每个值返回xx,如果该值在rr中,则为0。这些可用于选择要绘制的条目。