我有一个矩阵('数据'),它由第一列中的日期和第二列中的温度数据组成,还有一个值的矢量('dDates'),它们也代表一年中的某一天。 e.g。
clear all
n = 366;
day = linspace(1+1/24,n,(n-1)*24)';
temp = rand(8760,1);
data = [day,temp];
dDates = [12, 32, 45, 67];
我正在尝试更改'数据',使其仅包含在'dDates'中指定的日期编号之后的120行测量的数据,尽管其大小与原始'数据'相同,即其他行已填充与nans。
“数据”中的每次测量均指一小时,因此120指的是5天的数据。
到目前为止,我已经使用过:
[r,c,v] = find(data(:,1)>dDates(1),1,'first');
在循环内部找到'date'中'dDates'的每个元素的行号,但我发现很难将所有内容组合在一起以产生我需要的结果。我应该怎么做呢?
答案 0 :(得分:3)
这里有很多事情,所以我做了几处改动。生成data
可以避免LINSPACE命令。此外,温度数据初始化为NaN:
>> n = 366; >> data = [(1:1/24:(n-1/24))' ones(8760, 1)*NaN];
您可以通过计算起始索引来避免使用循环来查找每个感兴趣日期的起始索引,因为data
中的日期列在时间上均匀分布:
>> dDates = [12 32 45 67]; >> startIndex = (dDates - 1) * 24 + 1;
验证这是否有效:
>> data(startIndex) ans = 12 32 45 67
生成感兴趣日期的随机温度数据:
>> temp = rand(120*length(dDates), 1);
确定与感兴趣的开始日期和以下120条记录相对应的data
的索引:
>> targetIndex = repmat((0:119)', 1, length(dDates)) + repmat(startIndex, 120, 1);
将随机数据插入目标位置:
>> data(targetIndex, 2) = temp;
验证这是否有效: