【问题标题】:MATLAB: How to access 'Duration' datatypeMATLAB:如何访问“持续时间”数据类型
【发布时间】:2016-06-03 11:42:25
【问题描述】:

考虑下面的例子

xDATA = data_timestamp;
[~,~,Days,Hour,Min,~] = datevec(xDATA(2:end) - xDATA(1:end - 1));
BadSamplingTime = find((Days)> 0 | (Hour)> 0 |(Min)> 5 );

其中 xData 包含一个时间戳矢量,我试图找到采样时间大于 5 分钟的样本,该算法工作正常,但它为与我的时间戳矢量一样大的数据创建了 3 个额外的矢量(时间戳矢量的大小非常大)而如果我这样做

DurationTime = xDATA(2:end) - xDATA(1:end - 1);

它只会创建一个相同长度的“持续时间”数据类型的向量,而不是第二行,这将更容易处理,因为问题是我似乎无法访问持续时间数据类型的每个索引 例如

DurationTime(5,1)

ans = 

   26:00:01

我需要访问这 26 小时的部分,有人知道该怎么做吗?或者更好的建议

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您可以创建一个duration-对象,然后使用它与持续时间向量DurationTime 进行比较。 a>b 的结果是一个逻辑向量,可直接用于索引 DurationTime 的元素,从而为您提供持续时间大于 5 分钟的所有值。
    旁注:您可以直接使用diff 计算差异/持续时间。

    代码:

    % create example data
    xDATA = (([0:4,4+26*60,4+26*60+1:4+26*60+5])/24/60+datetime('now')).';
    
    % calculate the durations
    DurationTime = xDATA(2:end) - xDATA(1:end-1);      % as in the question
    %DurationTime = diff(xDATA);                       % alternative
    
    % get index and values of all durations greater than 5 minutes
    ind = find(DurationTime>duration(0,5,0))
    DurationTime(ind)
    
    % get values of all durations greater than 5 minutes (direct solution, if no index needed)
    DurationTime(DurationTime>duration(0,5,0));
    

    结果:

    ind =
    
         5
    
    ans = 
    
       26:00:00
    

    【讨论】:

    • 如果我需要找到持续时间矩阵的索引,我应该怎么做?因为 find() 不适用于持续时间数据类型
    • @Umar 我在回答中添加了它。您可以在逻辑向量上使用 find,因为持续时间大于 5 分钟的条目具有非零值 1。因此,find 返回该索引。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多