【问题标题】:Matlab Dataset Array Calculating delta tMatlab数据集数组计算增量t
【发布时间】:2014-03-05 20:54:08
【问题描述】:

我有一个非常大的数据集数组,其中包含超过一百万个值,如下所示:

Month Day Year  Hour Min Second   Line1   Line2   Power  Dt
7     8   2013    0   1   54      1.91    4.98    826.8  0
7     8   2013    0   0   9       1.93    3.71    676.8  0
7     8   2013    0   1   15      1.92    5.02    832.8  0
7     8   2013    0   1   21      1.91    5.01    830.4  0

等等。 当秒数达到 60 时,它将从 0 重新开始,因此第一个数字更大。我需要通过获取当前行的秒列并减去前一行的秒列并更正负值来填充 delta t 列 (Dt)。此操作无法在循环中执行此操作,因为它需要很长时间才能完成,并且需要在一个简单的一次性向量减法操作中完成。

【问题讨论】:

    标签: arrays matlab dataset timedelta


    【解决方案1】:

    您可以尝试diff 命令来生成这样的结果。它非常快,应该可以在没有任何 for 循环的情况下工作。 高温

    【讨论】:

    • Current.Dt = diff(Current.Second);这让我很接近,但如果上限值较大,则会给出错误的数字。
    • 时间应该在增加,上限值怎么会变大?
    【解决方案2】:
     Dt=diff(datenum(A(:,1:6)))*60*60*24;
    

    这会以秒为单位给出增量,但我不确定您希望您对负差异进行什么校正。你能举一个预期输出的例子吗?

    请注意,Dt 将比 A 短一个条目,因此您可能需要填充它。

    您可以使用命令删除负值(我认为)

    Dt(Dt<0)=Dt(Dt<0)+60;
    

    如果需要对Dt向量进行填充,使其与数据集长度相同,试试

    Dt=[Dt;0];
    

    【讨论】:

    • Delta t 是时间变化,例如使用 Current.Dt = diff(Current.Second);在第二行和第三行 (15-9) 上给出的 delta t 为 6。当您使用 Current.Dt = diff(Current.Second);在第一行和第二行,您会得到 (9-54) =-45 的 delta t,这是错误的。收集数据的方式是,一旦秒数达到 59,数据就会重新开始。真正的 delta t 是 15,它是通过减去 (69-54) 获得的。由于收集数据的方式,当较大的数字在较小的数字之前时,它会给出不正确的 delta t。而且我不知道如何解决它。
    • 顺便说一下,数据集的名称是'Current'。
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2013-09-24
    • 2011-02-19
    相关资源
    最近更新 更多