如何在matlab中预分配日期时间数组

时间:2015-12-02 10:57:45

标签: arrays matlab datetime

我想知道是否有办法在Matlab中预先分配datetime数组。

我解释了我的问题:我需要从许多文件中读取几个日期(假设它们是10个)(假设它们是100)并且我想将它存储在日期时间数组10X100中。 如果我的数据是简单的数字日期(即double),我可以预先分配一个数组:DataTable = zeros(10,100)。我想用datetime数据类型做类似的事情,但我无法找到,你能帮我吗?

找到可能的解决方法/解决方案

我做了一些测试,我发现这个解决方法可能有问题:

DataTable = repmat(datetime(0,0,0), 10, 100);

这样我就从一开始就将datetime类型的数组10X100初始化为默认值。我发布了这个问题的编辑,以防它对某人有帮助

4 个答案:

答案 0 :(得分:2)

您可以初始化一个空的:

DataTable = datetime([],[],[]);

然后找到一些聪明的方法来填充它。这意味着您可以根据您的算法需求动态添加元素。

你确定有一个全零的固定数组是否有意义?

答案 1 :(得分:2)

编辑(更好的解决方案):

我最近发现的另一个选项是使用R2015b中引入的NaT()函数(@csanchisb在他的回答中也提到过)。 NaT代表“非时间”,类似于NaN的浮点值。这可能是最好的解决方案,因为它使用内置函数可以完全按照您的需要进行操作,并且还可以清楚地表明矩阵的哪些条目未设置为有效的日期时间值。

DataTable = NaT(10,100);

运行上面的代码后,您可以循环浏览并覆盖DataTable中的每个条目,并在读取它们时使用实际的datetime个对象。

原始回答:

我认为作者使用repmat()发布的解决方案在大多数情况下可能是最好的,但这是另一种可能的解决方案:

DataTable = datetime(zeros(10,100), zeros(10,100), zeros(10,100));

DataTable = zeros(10,100);
DataTable = datetime(DataTable, DataTable, DataTable);

我写了一些快速代码来比较它的性能和作者的repmat()方法。看起来这个方法对于小型数组(~100个日期时间对象)来说要快一点,但对于大型数组(约100万个日期时间对象),repmat()要快得多。

但是,由于预分配通常只发生一次,因此速度可能与语义清晰度无关紧要。在这种情况下,我仍然使用repmat()解决方案,因为我认为解释其代码正在做什么更容易。

答案 2 :(得分:2)

datetime(0, 0, 0)将生成30-Nov--0001,这与任何默认一样好。构建数组的明显方法是repmat(datetime(0, 0, 0), 10, 100)

另一种方法是使用NaT('不是时间'),类型为datetime,更明显是默认值。在这种情况下,您可以使用NaT(10, 100)直接初始化数组。

答案 3 :(得分:0)

你可以使用" cell Array"像这样:

DataTable = cell(10,100); 

并使用大括号填充每个单元格。

例如: DataTable{2,3}='2015-12-2';