1

Matlab でいくつかの座標をプロットすることを含む小さなプロジェクトに取り組んでいます。

以下は私のcsvファイルのサンプルです。データの合計行数は約 160,000 です。

31040,55725,0
30930,55725,-1
30875,55630,3
30765,55630,0
30655,55630,5
30545,55630,0

最初の 2 つの列は x、y 座標で、3 番目の列はそれらの値です。データは、RPG の種類のゲームから生成されます。プレイヤーが特定の座標で何かを行い、何かを見つける (0 < z <= 23 ) か、何も見つけない (z = 0)。(z = -1 はわからないことを意味し、この場合は無視できます)。プレイヤーは何度もゲームをプレイできるため、x、y 座標の一部は同じ値または異なる値になります。

私がやりたいことは、座標がヒットした回数と、ヒットの値を示す 3D プロットを、ヒストグラムのように作成することです。

私の値の範囲は、x: 30000 ~ 33000、Y: 55000 ~ 56000、z: -1 ~ 23 です。

5 行を含むサンプル ファイルでメッシュ/メッシュグリッドを使用しようとしましたが、うまくいきました。しかし、列を再配置したり行列を転置しようとしても、x、y、z 座標は常に間違って配置されていました。

注:元のファイルでコードを試したところ、「メモリ不足」エラーが発生しました。Matlab は大量のデータを取得できませんか? それとも私のコードですか?

私が試した簡単なコードを以下に示します。

x = test(:, 1);
y = test(:, 2);
z = test(:, 3);

zz = [x,y,z];
%R = meshgrid(zz);
%mesh(R);
mesh(zz)

前もって感謝します!

4

2 に答える 2

0

accumarrayカスタム関数で使用するのはどうですか?

sel = test(:,3) > 0; % work only with z>0
x = test(sel,1) - min(test(sel,1)) + 1; % convert from x to legitimate indices
y = test(sel,2) - min(test(sel,2)) + 1;
a = accumarray( {x, y}, test(sel,3), [max(x) max(y)], @numel, [], true );
% plot using bar3
bar3( a, 1, 'detached' );
于 2013-02-27T16:29:11.720 に答える
0

私はこれを使用します:

[X,Y] = meshgrid(30000:33000,55000:56000);
Z=zeros(size(X));
Z(31040-30000+1,55725-55000+1) = 0;
Z(31930-30000+1,55725-55000+1) = -1;
Z(30875-30000+1,55630-55000+1) = 3;
mesh(Z)

次の点に注意してください。-size(X)== size(Y)

それで、私がやりたいのは、座標がヒットした回数と、ヒットの値がヒストグラムのように何であったかを示す3Dプロットを作成することです。

適切なZ(i、j)フィールドをインクリメントして、座標の出現頻度をカウントできます。

于 2013-02-27T16:29:51.500 に答える