0

这在 MATLAB 中应该是直截了当的,我只是不知道如何并且被卡住了。我有如下形式的数据:mm/dd/yyyy hh:mm windspeed- 这是从 1991 年到现在(2013 年)的单元格数组和数值数组的每小时数据:

8/22/1993 23:00 2.381453514
8/23/1993 0:00  3.39369154
8/23/1993 1:00  5.398661613
8/23/1993 2:00  7.231492996
8/23/1993 3:00  9.187699318
8/23/1993 4:00  9.802619934
8/23/1993 5:00  8.85418129
8/23/1993 6:00  9.889941216
8/23/1993 7:00  10.4628706
8/23/1993 8:00  10.8967123
8/23/1993 9:00  10.12729263
8/23/1993 10:00 9.106620789
8/23/1993 11:00 7.600066185
8/23/1993 12:00 6.597990036
8/23/1993 13:00 6.764455795
8/23/1993 14:00 7.360760689
8/23/1993 15:00 5.828835011

我正在尝试仅提取第三列 ( windspeed)。我需要能够更改日期范围以一次提取一个月,例如包含 1993 年 8 月的月份“08”的所有行,然后以供将来使用包含 9 月的“09”的所有行和2013 年。我不确定使用datenumfind 函数是否更好,然后如何为这两种情况编写代码。
我正在使用上面显示的部分数据xlsread来读取文件。.csv

4

2 回答 2

1

我不知道您现在如何导入数据,以及工作区中的变量是什么,但这里有一种方法:

在 Matlab 的窗口中找到xxx.csv-file 。Current Folder双击它以导入它。在出现的窗口中,您可以选择Delimiter: Space。玩弄设置,找到“最合适的”

在此处输入图像描述

现在,您在 Matlab 工作区中拥有了变量。

hhv = datevec(hh);

% You are interested in column 4, HOUR:
% hhv is a matrix with [2013, 1, 1, HOUR, 0, 0]

现在,如果您想要 1993 年 8 月 23 日 0:00 到 06:00 之间的所有风速:

winds = ws(dt == datenum(1993,8,23) & hhv(:,4) >= 0 & hhv(:,4) < 6)

winds =

    3.3937
    5.3987
    7.2315
    9.1877
    9.8026
    8.8542
于 2013-09-24T20:45:05.557 回答
1

读取整个文件的通用方法可能是:

fid  = open('data.csv');
% %d = integer, %f = float
data = textscan(fid, '%d/%d/%d %d:%d %f');
fclose(fid);

% all months in data
disp(data{1});

% all wind speeds in data
disp(data{end});

您可以通过修改 textscan 中的匹配模式来限制返回的数据:

% only August
mask   = data{1} == 8;
speeds = data{end}(mask);

% June of 1997
mask   = (data{1} == 6) & (data{3} == 1997);
speeds = data{end}(mask);

在此处查看更多信息:http: //www.mathworks.com/help/matlab/ref/textscan.html#btg0kes

于 2013-09-24T20:57:24.040 回答