【问题标题】:Increasing efficiency of loop that uses datenum function?提高使用 datenum 函数的循环的效率?
【发布时间】:2008-12-06 21:58:21
【问题描述】:

当 DJI 矩阵有 21000 行时,以下循环在 octave 中运行大约需要 700 秒,在 matlab 中运行大约需要 22 秒。如何提高效率?

对于 i=1:长度(DJI) DJI2(i,1)=datenum(char(DJI(i,2)),'yyyy-mm-dd'); 结尾

【问题讨论】:

    标签: matlab octave


    【解决方案1】:

    你记得预分配 DJI2 吗?

    更重要的是,您根本不需要循环。 datenum 对数组进行操作。 试试这个:

    DJI2=datenum(char(DJI(:,2)),'yyyy-mm-dd');

    【讨论】:

    • 使用 char() 似乎不允许我在整个数组上调用 datenum,您提供的代码示例不起作用。
    • 大疆的型号是什么?它是一个单元阵列吗?如果你有一个数组 A = ['2005-10-10'; '2006-11-12'; ...] 然后 datenum(A, 'yyyy-mm-dd') 将起作用。看看你能不能把 DJI 转换成 A 的样子。
    【解决方案2】:

    我用以下代码替换了循环,速度至少提高了一个数量级。

    DJI2(:,1) = reshape(datenum(strvcat(DJI(:,2)(:)), length(DJI(:,2)),'yyyy-mm-dd'));
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 2018-04-18
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多