我有一个包含两个数组的大型数据集,比如x
和y
。这些阵列的大小超过100万个数据点。是否有一种简单的方法可以对这些点中的2000个点进行散点图,但是它是否能代表整个集合?
我正在考虑创建另一个数组r; r = max(x)*rand(2000,1)
获取x数组的随机样本。有没有办法找到r
中的值等于或接近x
中的值的位置?它们不必位于相同的索引位置,而是整个矩阵。然后,我们可以根据y
x
值相关联的r
值
我只是不确定如何编码。有没有比这样做更好的方法?
答案 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之内。
ismember
为1
的每个值返回xx
,如果该值在rr
中,则为0
。这些可用于选择要绘制的条目。