我有一个大文本文件,根据纬度和经度给我太阳辐照度,每月平均22年。
These data are regional averages; not point data.
Created: March 12, 2008
Lat Lon Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Ann
-90 -180 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -179 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -178 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -177 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -176 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -175 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -174 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -173 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -172 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -171 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -170 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -169 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -168 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -167 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -166 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -165 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -164 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -163 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -162 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
-90 -161 9.63 5.28 0.75 0.00 0.00 0.00 0.00 0.00 0.10 3.24 8.28 10.97 3.19
现在,我想找到lat = -90&的月平均值。长= -166。如何将它们调用到我的工作空间变量中?
此外,在matlab中工作时,最好在运行代码时调用整个文本文件,还是应该将整个文本文件复制粘贴到代码中,以便更快速,更节省空间。 谢谢你的帮助。
答案 0 :(得分:2)
我个人是桌面数据类型的粉丝。我会做这样的事情:
t = readtable('punit.txt','HeaderLines',2,'Delimiter',' '); % read into table
index = t.Lat == -90 & t.Lon==-166; % create a binary indicator as to whether
% each row matches the criteria
my_data = t{index, 3:14}; % extract the data into a matlab array
mean_my_data = mean(my_data, 2); % calculate mean (2 makes it along columns)
您可能已经知道这一点,但我会将此代码放在my_script.m
这样的文件中,然后使用my_script
从matlab工作区调用script。
答案 1 :(得分:1)
马修的回答是完全可以接受的。事实上,这是我所采取的方法。但是,如果您无法访问R2013b中引入的table
界面,dlmread
可能更适合使用。只需跳过三行,并使用空格作为分隔符,将该矩阵读入MATLAB。
读入此矩阵后,搜索第一列有-90且第二列有-166的所有行,索引到矩阵并找到每列的平均值。假设您的文本文件名为data.txt
:
data = dlmread('data.txt', ' ', 3, 0);
ind = data(:,1) == -90 & data(:,2) == -166;
extract = data(ind,3:end);
mean_data = mean(extract, 1);
第一行代码在文本文件中读取数字矩阵并跳过前三行。空格用作分隔符。接下来,我们找到一个布尔向量,它找到第一列为-90的所有行,同时第二列为-166。一旦我们找到这些行,我们将数据子集化并仅提取第三列及以后的列,因为我们不希望将纬度和经度包括在计算中。
一旦我们提取了这些数据,我们就会使用mean
单独找到每个月的平均值,并找到列式平均值,使用值为1的第二个参数,这意味着第一个维度的平均值或行是寻求的。
答案 2 :(得分:0)
尝试使用Matlab 导入数据按钮转到主页标签 - >在变量部分 - >选择导入数据。
选择您的文本文件并获取要导入的行或列。
或者,右键单击“当前文件夹”浏览器中文件的名称,然后选择“导入数据”。 - >导入工具将打开。
也可以在 Matlab工作区中创建变量。
它比手动复制粘贴效果更好,耗时更少。