0

と という 2 つの配列を持つ大規模なデータ セットがxありyます。配列には、サイズが 100 万を超えるデータ ポイントがあります。これらのポイントのうち 2000 点のみの散布図を作成し、セット全体を代表する簡単な方法はありますか?

別の配列 r を作成する方向に沿って考えています。r = max(x)*rand(2000,1)x 配列のランダム サンプルを取得します。rの値が の値と等しい、または値に近い場所を見つける方法はありxますか? それらは同じインデックス付きの場所にある必要はありませんが、マトリックス全体にあるだけです。次に、見つかった値yに関連付けられた値をプロットできますxr

これをコーディングする方法がわかりません。これを行うよりも良い方法はありますか?

4

2 に答える 2

0

データがどのように見えるかに依存するため、この手順がデータをどの程度代表するかはわかりませんが、確かにそのようなコードを作成できます。最も近い値を見つける最も簡単な方法は、テスト ベクトルと目的の値minabs差を取得することです。

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

行の は、最小値のインデックスを vector に格納することを意味すること[~,z(i)]に注意してください。minz

移動平均のようなものを試すこともできます。このビデオを参照してください: 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))
于 2013-10-31T12:56:40.650 に答える
0

おそらく最も簡単な方法は、round関数を使用して物事を整数に変換することです。その後、それらを比較できます。たとえば、 の値の 0.1 以内にある点を見つけたい場合はr、最初に値に 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の各値に対して を返し、そうでない場合は を返します。これらを使用して、プロットするエントリを選択できます。xxrr0

于 2013-10-31T13:16:38.713 に答える