根据两个第一个变量

时间:2015-12-15 08:38:59

标签: matlab search text

我有一个大文本文件,根据纬度和经度给我太阳辐照度,每月平均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中工作时,最好在运行代码时调用整个文本文件,还是应该将整个文本文件复制粘贴到代码中,以便更快速,更节省空间。 谢谢你的帮助。

3 个答案:

答案 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工作区中创建变量。

它比手动复制粘贴效果更好,耗时更少。