繁体   English   中英

MATLAB:2D 数据到 3D ! 如何?

[英]MATLAB: 2D DATA TO 3D ! How to?

我有一个34200 x 4桌子。 该表显示了某些纬度和经度的 30 年月 pr(降水量)量。 所以列是latlondatepr 我想将其转换为longitude x latitude x month的 3D 矩阵。 我附上我的桌子。 请告诉我怎么做我是初学者。 如果我不想根据月份转换它,我可以但这个问题对我来说太复杂了。 请看我的表格,它只有 235 KB我将它上传到我的 DropBox,所以请点击右上角的打开并点击下载。

这是我的图片

检查您的数据,您的纬度和经度值实际上代表了 95 个看似随机分散的独特位置。 您可以在下图中看到这一点。

length(unique(C.lat)) % 95
length(unique(C.lon)) % 95
scatter(C.lat, C.lon)

在此处输入图片说明

如果位置在网格中间隔开,则使用latlon作为数据矩阵的轴是有意义的。 但是,最好仅使用一个轴来表示唯一位置。 然后,这为您留下了代表日期的第二个轴。

length(unique(C.date)) % 360
360 * 95 % 34200 - the number of values we have

重新格式化数据

因此,我将数据存储在二维矩阵中,如下所示。

locations_lat = unique(C.lat, 'stable');
locations_lon = unique(C.lon, 'stable');
dates = unique(C.date, 'stable');
data = reshape(C.pr, length(dates), length(locations_lat)); % size 360 x 95

然后,要检查这是否有效,请选择一个随机示例。

location_num = 27;
date_num = 242;
lat = locations_lat(location_num) % 14.68055556
lon = locations_lon(location_num) % 65.23111111
date = dates(date_num) % 2/1/2009
precipitation = data(date_num, location_num) % 16.7179

在原始故事中搜索那个位置和日期,我们有:

9602|   14.6805555600000    65.2311111100000    '2/1/2009'  16.7179000000000

如果A是具有 4 列[34200x4]数据,那么您可以创建一个 3 维矩阵,如下所示:

B = zeros(len(A),3)
B(:, 1) = A(:, 1)
B(:, 2) = A(:, 2)
B(:, 3) = A(:, 3)

甚至可能:

B(:,1:3) = A(:, 1:3)

根据您的数据设置方式,您可能需要转置:

B = 'B

只要维度匹配,您就可以映射数据。

如果您有更多列或用于动态数据条目,则可以实现 for 循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM