0

我有两组数据。一组数据是一个矩阵,每行包含不同的样本,列中包含有关每个样本的信息,其中一列包含经度数据,另一列包含样本的纬度数据。另一个数据集由三个网格组成。第一个网格包含数据的纬度,第二个网格包含数据的经度,第三个网格包含 1° 纬度经度网格的数据。

我想要找出第二个数据集中的哪些数据与第二个数据集中的数据相对应。我的意思是,如果样本落入第二个数据集的特定网格中,则需要提取该网格中的数据,并且需要知道数据适用于哪个样本。

所以只要说在纬度 60 和 59 之间的网格中,经度 100 和 101 样本 x 下降。只需说这个特定网格的网格数据集中的数据是 10。我想知道 10(网格中的数据)适用于样本 x。

最后,我希望网格数据对应于新矩阵中的样本,该矩阵可以作为样本数据集的伙伴(即,如果样本 x 在第 40 行,那么矩阵 10 在第 40 行) ,或者作为新列添加到相同的数据集中。请记住,某些样本将落入同一个网格中。

我对matlab相当缺乏经验,我尝试过刷机工具,但这不适用于这个例子。我能想到的所有可能的工作是将样本数据中的每个 long 和 lat 舍入为偶数,然后找到哪些样本在 long 和 lat 中重叠,然后将样本数据中的 long 与 long 网格相交,然后执行对于 lat 网格,查找每个样本所属的行和列,然后找到每个样本的数据。这似乎还有很长的路要走,我不太确定它的效果如何。

我已经完成了这个方法,它在一定程度上起作用了......我有每个样本的数据所在的行和列(即样本 x 可以在第 8 行第 100 列中找到)。但是,当我尝试从网格中提取这些数据时,它不是包含一列而是包含多列的矩阵,答案仍然在矩阵的样本位置。如何从网格的每一行中获取一个数据点并最终得到一个只有一列(或可以变成一列的行)的矩阵?

谢谢

4

1 回答 1

0

假设您的第一个数据集位于矩阵 X 中,其中第一列是纬度,第二列是经度,其他任何列都是现有数据:

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)floor向下舍入,因此 100 到 101 之间的任何值都将链接到 100 等。

现在:

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

n并且m不是纬度或经度,而是将数据集中的点与其中X的某些值相关联的索引,然后引用网格中的某些值。latlondata

这是最后一个技巧 - 用于sub2ind将您的nm引用转换为对网格中位置的单个引用,然后一次性提取所有需要的数据:

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

Xdata应该是单列,大小与X.

于 2014-02-06T12:29:13.840 回答