2012-02-01 150 views
1

我有一个矩阵('数据'),它由第一列中的一年中的第一天和第二列中的温度数据组成,还有一个也表示日期的值的向量('dDates')年。例如在matlab中更改矩阵

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行测量的数据其他排满了南瓜。

'数据'中的每个度量指的是一个小时,因此120指的是5天的数据值。

到目前为止,我已经使用:

[r,c,v] = find(data(:,1)>dDates(1),1,'first'); 

一个循环中找到“日期” dDates'的每个元素的行号,但我发现很难把一切融合在一起,产生的结果是我需要。我应该如何去做这件事?

回答

3

这里有很多事情要做,所以我做了一些改变。生成data可以避免LINSPACE命令。此外,温度数据初始化为楠:

 
>> 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; 

验证这工作: enter image description here