0

私は2セットのデータを持っています。データの 1 つのセットは、各行に異なるサンプルを含み、列に各サンプルに関する情報を含む行列です。これらの列の 1 つには経度データが含まれ、もう 1 つの列にはサンプルの緯度データが含まれます。もう 1 つのデータセットは、3 つのグリッドで構成されています。1 つのグリッドにはデータの緯度が含まれ、2 番目のグリッドにはデータの経度が含まれ、3 番目のグリッドには緯度 1° の経度グリッドのデータが含まれます。

私が望むのは、2 番目のデータセットのどのデータが 2 番目のデータセットのデータに対応するかを調べることです。これが意味することは、サンプルが 2 番目のデータセットの特定のグリッドに分類される場合、このグリッドのデータを抽出する必要があり、データがどのサンプルに適用されるかを知る必要があるということです。

したがって、緯度 60 と 59、および経度 100 と 101 の間のグリッドでサンプル x が落ちると言うだけです。この特定のグリッドでは、グリッド データセットのデータが 10 であるとします。10 (グリッド内のデータ) がサンプル x に適用されることを知りたいです。

最後に、サンプル データセットのパートナーとして機能する新しいマトリックスのサンプルに対応するグリッド データを取得したいと思います (つまり、サンプル x が行 40 にある場合、マトリックス 10 は行 40 にあります)。 、または新しい列として同じデータセットに追加されます。一部のサンプルが同じグリッドに分類されることに注意してください。

私は matlab の経験がかなり浅いので、ブラシ ツールを試してみましたが、この例ではうまくいきません。私が考えることができる可能性があるのは、サンプルデータの経度と緯度を偶数に丸め、経度と緯度で重複するサンプルを見つけ、サンプルデータの経度を長いグリッドと交差させてから、各サンプルが該当する行と列を見つけてから、各サンプルのデータを見つける緯度グリッドについても同じです。これは長い道のりのように思えますし、うまく機能するかどうかもわかりません。

私はこの方法を完了し、ある程度機能しました....各サンプルのデータが含まれる行と列があります(つまり、サンプルxは行8列100にあります)。ただし、グリッドからこのデータを抽出しようとすると、1 つの列ではなく多数の列を含むマトリックスであり、答えはマトリックスのサンプルの場所にあります。グリッドの各行から 1 つのデータ ポイントを取得し、最終的に 1 列 (または列に変換できる 1 行) のみのマトリックスを作成するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

最初のデータセットが行列 X にあると仮定すると、最初の列は緯度、2 番目の列は経度で、他の列は既存のデータです。

xlat = floor(X(1,:)); 
xlon = floor(X(2,:));

lat = % a list of the latitudes covered in the grid
lon = % a list of the longitudes covered in the grid
data = % the matrix of data you want to extract - a 2D grid

一緒lat(n),lon(m)に、 のデータを含むグリッドの正方形の左下隅への参照を形成しますdata(n,m)floor100 から 101 の間の値はすべて 100 にリンクされるように切り捨てられます。

今:

   [~ n] = ismember(xlat,lat);
   [~ m] = ismember(xlon, lon);

nmは緯度や経度ではなく、データ セット内のポイントXをいくつかの値に関連付け、グリッド内のいくつかの値を参照するlatインデックスです。londata

最後のトリックは次のとおりです。との参照をグリッド内の位置への単一の参照にsub2ind変換してから、必要なすべてのデータを一度に抽出します。nm

ind = sub2ind(size(data),n,m); % presuming the size of data is lat x lon);
Xdata = data(ind);

Xdataは、 の行数と同じサイズの 1 つの列である必要がありますX

于 2014-02-06T12:29:13.840 に答える