Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
如何在matlab中对时间矢量数据进行重采样_Matlab_Time Series_Interpolation - Fatal编程技术网

如何在matlab中对时间矢量数据进行重采样

如何在matlab中对时间矢量数据进行重采样,matlab,time-series,interpolation,Matlab,Time Series,Interpolation,我必须对以下单元格数组重新采样: dateS = '2004-09-02 06:00:00' '2004-09-02 07:30:00' '2004-09-02 12:00:00' '2004-09-02 18:00:00' '2004-09-02 19:30:00' '2004-09-03 00:00:00' '2004-09-03 05:30:00' '2004-09-03 06:00:00' 按照不规则的间距,例如,在第1行和第2行之间有5个读数,而在第2行和第3行之间有10个读数。

我必须对以下单元格数组重新采样:

dateS = 

'2004-09-02 06:00:00'
'2004-09-02 07:30:00'
'2004-09-02 12:00:00'
'2004-09-02 18:00:00'
'2004-09-02 19:30:00'
'2004-09-03 00:00:00'
'2004-09-03 05:30:00'
'2004-09-03 06:00:00'
按照不规则的间距,例如,在第1行和第2行之间有5个读数,而在第2行和第3行之间有10个读数。中间体“读数”的数量存储在向量“v”中。所以,我需要的是一个新的向量,其中所有中间日期/时间的格式都相同

编辑:

列表中前两个读数之间有1H30分钟=90分钟。五次间隔相当于90分钟/5=18分钟。现在在(1)和(2)之间插入五个“读数”,每个读数间隔18分钟。所有的约会我都要这么做


有什么想法吗?谢谢

以下代码符合您的要求(我为
v
选择了任意值-只要vector
v
中的元素数比
日期中的条目数少一个,这应该可以工作):

数组
newStrings
最后包含以下内容:例如,您可以看到第一次和第二次之间的时间间隔被分割为6个15分钟的段

2004-09-02 06:00:00
2004-09-02 06:15:00
2004-09-02 06:30:00
2004-09-02 06:45:00
2004-09-02 07:00:00
2004-09-02 07:15:00
2004-09-02 07:30:00
2004-09-02 08:24:00
2004-09-02 09:18:00
2004-09-02 10:12:00
2004-09-02 11:06:00
2004-09-02 12:00:00
2004-09-02 13:30:00
2004-09-02 15:00:00
2004-09-02 16:30:00
2004-09-02 18:00:00
2004-09-02 18:30:00
2004-09-02 19:00:00
2004-09-02 19:30:00
2004-09-02 20:24:00
2004-09-02 21:18:00
2004-09-02 22:12:00
2004-09-02 23:06:00
2004-09-03 00:00:00
2004-09-03 00:55:00
2004-09-03 01:50:00
2004-09-03 02:45:00
2004-09-03 03:40:00
2004-09-03 04:35:00
2004-09-03 05:30:00
2004-09-03 05:37:30
2004-09-03 05:45:00
2004-09-03 05:52:30
该代码依赖于几个概念:

  • 日期可以表示为字符串或
    datenum
    。我使用内置函数在它们之间切换
  • 一旦将日期/时间作为一个数字,就很容易进行插值
  • 我使用
    diff
    函数查找连续时间之间的差异
  • 我没有试图“矢量化”代码-您没有要求高效的代码,对于这样的示例,
    for
    循环的清晰性胜过一切

  • 下面的代码符合您的要求(我为
    v
    选择了任意值-只要vector
    v
    中的元素数比
    日期中的条目数少一个,这就行了):

    数组
    newStrings
    最后包含以下内容:例如,您可以看到第一次和第二次之间的时间间隔被分割为6个15分钟的段

    2004-09-02 06:00:00
    2004-09-02 06:15:00
    2004-09-02 06:30:00
    2004-09-02 06:45:00
    2004-09-02 07:00:00
    2004-09-02 07:15:00
    2004-09-02 07:30:00
    2004-09-02 08:24:00
    2004-09-02 09:18:00
    2004-09-02 10:12:00
    2004-09-02 11:06:00
    2004-09-02 12:00:00
    2004-09-02 13:30:00
    2004-09-02 15:00:00
    2004-09-02 16:30:00
    2004-09-02 18:00:00
    2004-09-02 18:30:00
    2004-09-02 19:00:00
    2004-09-02 19:30:00
    2004-09-02 20:24:00
    2004-09-02 21:18:00
    2004-09-02 22:12:00
    2004-09-02 23:06:00
    2004-09-03 00:00:00
    2004-09-03 00:55:00
    2004-09-03 01:50:00
    2004-09-03 02:45:00
    2004-09-03 03:40:00
    2004-09-03 04:35:00
    2004-09-03 05:30:00
    2004-09-03 05:37:30
    2004-09-03 05:45:00
    2004-09-03 05:52:30
    
    该代码依赖于几个概念:

  • 日期可以表示为字符串或
    datenum
    。我使用内置函数在它们之间切换
  • 一旦将日期/时间作为一个数字,就很容易进行插值
  • 我使用
    diff
    函数查找连续时间之间的差异
  • 我没有试图“矢量化”代码-您没有要求高效的代码,对于这样的示例,
    for
    循环的清晰性胜过一切

  • 可以使用以下内容插入序列日期:

    结果是:

    datestr(resampled)
    ans =
    02-Sep-2004 06:00:00
    02-Sep-2004 06:18:00
    02-Sep-2004 06:36:00
    02-Sep-2004 06:54:00
    02-Sep-2004 07:12:00
    02-Sep-2004 07:30:00
    02-Sep-2004 08:37:30
    02-Sep-2004 09:45:00
    02-Sep-2004 10:52:30
    02-Sep-2004 12:00:00
    02-Sep-2004 14:00:00
    02-Sep-2004 16:00:00
    02-Sep-2004 18:00:00
    02-Sep-2004 18:45:00
    02-Sep-2004 19:30:00
    02-Sep-2004 20:37:30
    02-Sep-2004 21:45:00
    02-Sep-2004 22:52:30
    03-Sep-2004 00:00:00
    03-Sep-2004 01:06:00
    03-Sep-2004 02:12:00
    03-Sep-2004 03:18:00
    03-Sep-2004 04:24:00
    03-Sep-2004 05:30:00
    03-Sep-2004 05:40:00
    03-Sep-2004 05:50:00
    03-Sep-2004 06:00:00
    

    可以使用以下内容插入序列日期:

    结果是:

    datestr(resampled)
    ans =
    02-Sep-2004 06:00:00
    02-Sep-2004 06:18:00
    02-Sep-2004 06:36:00
    02-Sep-2004 06:54:00
    02-Sep-2004 07:12:00
    02-Sep-2004 07:30:00
    02-Sep-2004 08:37:30
    02-Sep-2004 09:45:00
    02-Sep-2004 10:52:30
    02-Sep-2004 12:00:00
    02-Sep-2004 14:00:00
    02-Sep-2004 16:00:00
    02-Sep-2004 18:00:00
    02-Sep-2004 18:45:00
    02-Sep-2004 19:30:00
    02-Sep-2004 20:37:30
    02-Sep-2004 21:45:00
    02-Sep-2004 22:52:30
    03-Sep-2004 00:00:00
    03-Sep-2004 01:06:00
    03-Sep-2004 02:12:00
    03-Sep-2004 03:18:00
    03-Sep-2004 04:24:00
    03-Sep-2004 05:30:00
    03-Sep-2004 05:40:00
    03-Sep-2004 05:50:00
    03-Sep-2004 06:00:00
    

    +1对于interp1的非常巧妙的使用-必须画一幅画来向自己解释发生了什么。。。请注意,随着最近对问题的澄清,您并没有给出“正确”的答案。。。如果v(1)=5,你需要18分钟的间隔。@Floris:谢谢,他指的是5个周期而不是5个中间步骤。编辑了答案。没问题——起初我是这样做的,但后来他更新了问题。我注意到你复制了我的首字母
    v
    vector。。。这就是为什么我可以说:-)+1非常巧妙地使用interp1-必须画一幅图来向自己解释发生了什么。。。请注意,随着最近对问题的澄清,您并没有给出“正确”的答案。。。如果v(1)=5,你需要18分钟的间隔。@Floris:谢谢,他指的是5个周期而不是5个中间步骤。编辑了答案。没问题——起初我是这样做的,但后来他更新了问题。我注意到你复制了我的首字母
    v
    vector。。。这就是为什么我可以说:-)