Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 绘制大型数据集的代表性样本-Matlab_Arrays_Matlab_Sample - Fatal编程技术网

Arrays 绘制大型数据集的代表性样本-Matlab

Arrays 绘制大型数据集的代表性样本-Matlab,arrays,matlab,sample,Arrays,Matlab,Sample,我有一个包含两个数组的大型数据集,例如x和y。阵列的大小超过100万个数据点。有没有一种简单的方法来绘制一个只有2000个点的散点图,但它能代表整个集合 我在考虑创建另一个数组rr=max(x)*rand(2000,1)获取x数组的随机样本。有没有办法找到r中的值等于或接近x中的值的位置?它们不必在同一个索引位置,而只是在整个矩阵中。然后,我们可以绘制与发现的x值相关的y值与r 我只是不知道该怎么编码。还有比这更好的方法吗 我不确定这个过程对您的数据有多大的代表性,因为这取决于您的数据是什么样子

我有一个包含两个数组的大型数据集,例如
x
y
。阵列的大小超过100万个数据点。有没有一种简单的方法来绘制一个只有2000个点的散点图,但它能代表整个集合

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


我只是不知道该怎么编码。还有比这更好的方法吗

我不确定这个过程对您的数据有多大的代表性,因为这取决于您的数据是什么样子的,但您当然可以编写类似的代码。找到最接近值的最简单方法是取测试向量和期望值之间差值的
abs

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
中存储最小值的索引

您也可以尝试移动平均线,请参见以下视频:

或者您可以绘制每个
n
点,类似于(我还没有测试过,所以没有保证):

或者,如果您知道您想要的点数(同样,未经测试):


也许最简单的方法是使用
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
xx
的每个值返回一个
1
,如果该值在
rr
中,则返回一个
0
。这些可用于选择要打印的条目

npoints = 2000;
interval = round(length(x)/npoints);
plot(x(1:interval:end),y(1:interval:end))
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));