Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm MATLAB中开始日期和结束日期之间的值之和_Algorithm_Matlab - Fatal编程技术网

Algorithm MATLAB中开始日期和结束日期之间的值之和

Algorithm MATLAB中开始日期和结束日期之间的值之和,algorithm,matlab,Algorithm,Matlab,如果在MATLAB中,我有一组表示连续时间段的开始日期和结束日期,我将如何获取单独的每日时间序列,并在每个开始/结束对上累积所述时间序列的任何值 这是否可以通过accumarray()实现?我不清楚构建一个向量,将时间序列的每个元素按开始/结束对分组是否有效 Inputs Start Date End Date 01/01/12 01/31/12 02/01/12 02/28/12 ... Date Value 01/01/12 23

如果在MATLAB中,我有一组表示连续时间段的开始日期和结束日期,我将如何获取单独的每日时间序列,并在每个开始/结束对上累积所述时间序列的任何值

这是否可以通过
accumarray()
实现?我不清楚构建一个向量,将时间序列的每个元素按开始/结束对分组是否有效

Inputs

Start Date    End Date

01/01/12      01/31/12
02/01/12      02/28/12
...

Date          Value

01/01/12      23
01/02/12      87
01/03/12      5
01/04/12      12
...
02/01/12      4

Output

Start Date    End Date    Value

01/01/12      01/31/12    127
02/01/12      02/28/12    4
...

假设您已经有两个向量,其开始日期和结束日期的格式可用于比较,并且您只想计算每个目录中出现的次数,那么这非常简单:

% Your data
Dates = 25*rand(10,1);
StartDate = [1 10 20];
EndDate = [9 19 29];

% The Calculation
Result = zeros(size(StartDate)); %Initialization
for d = 1:length(startdate)
    idx = dates >= StartDate & dates <= EndDate;
    Result(d) = sum(idx);
end
%您的数据
日期=25*兰特(10,1);
起始日期=[11020];
EndDate=[9 19 29];
%计算
结果=零(大小(起始日期));%初始化
对于d=1:长度(起始日期)

idx=dates>=StartDate&dates我将迭代每对开始/结束日期。然后选择索引开始/停止对并求和。如果使用
datestr
s,可以使以下内容不那么脆弱,同时在表示跨年份的时间等方面具有更大的灵活性

start_date = {'01/01/12'};
end_date={'01/31/12'};
datevec={'01/01/12','01/02/12','01/03/12','01/31/12'};
values=[23,87,5,12];

for i=1:numel(start_date)

    is = find(ismember(datevec,start_date{i})==1);
    ie = find(ismember(datevec,end_date{i})==1);

    sum(values(is:ie))

end

对于连续的时间段,以下方法可能有效。请注意,包含日期的字符串是单元格字符串,对于连续数据,只需要开始日期/结束日期矩阵的第一列

此外,请注意,为了清晰起见,我将时间序列数据分为两个变量

dateBins = {...
    '01/01/12';
    '02/01/12';
    '03/01/12';
    '04/01/12'};

dates = {
    '01/01/12'
    '01/02/12'
    '01/03/12'
    '01/04/12'
    '02/01/12'    };

values = [
    23
    87
    5
    12
    4];
有了这些变量,下面的代码

[thrash, idx] = histc(datenum(dates), datenum(dateBins))

accumVal = accumarray(idx, values);

result = zeros(length(dateBins), 1); 
result(1:length(accumVal),1) = accumVal;
将导致:

result =

   127
     4
     0
     0

所以你有3个变量,一个测量向量,每个测量的时间戳向量,以及一组开始和结束日期,你想计算测量的总和?@PatternMatching你能提供一个输入和输出样本吗?@slayton,完全正确,我自己说得再好不过了