这应该是直截了当的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
)。我需要能够更改日期范围以一次提取一个月,例如包含月份的所有行" 08"对于1993年8月,然后将来使用所有包含" 09"对于9月和2013年。我不确定使用datenum
或查找功能是否更好,然后如何对这两种情况进行编码。
我正在使用xlsread
来阅读.csv
文件,其中包含上面显示的部分数据。
答案 0 :(得分:1)
我现在不知道你如何导入你的数据,以及你工作区中的变量是什么,但这是一种方法:
在Matlab的xxx.csv
窗口中找到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]
现在,如果您希望所有风速在0:00到06:00 08/23/1993之间:
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
答案 1 :(得分: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