MeS*_*S83 4 arrays matlab datetime
我想知道是否有一种方法可以datetime在Matlab中预先分配数组。
我解释我的问题:我需要从许多文件(假设它们是 100)中读取多个日期(假设它们是 10),并且我想将其存储在日期时间数组 10X100 中。如果我的数据是简单的数字日期(即double),我可以将数组预先分配为DataTable = zeros(10,100):我想做一些与datetime数据类型类似的事情,但我找不到如何做,你能帮助我吗?
找到可能的解决方法/解决方案
我做了一些测试,发现这个解决方法可能会出现问题:
DataTable = repmat(datetime(0,0,0), 10, 100);
Run Code Online (Sandbox Code Playgroud)
这样我从一开始就有一个datetime初始化为默认值类型的 10X100 数组。我将此编辑发布到问题中,以防它对某人有帮助
编辑(更好的解决方案):
我最近发现的另一个选择是使用NaT()R2015b 中引入的函数(@csanchisb 在他的回答中也提到了)。 NaT代表“不是时间”,类似于NaN浮点值。这可能是最好的解决方案,因为它使用的内置函数可以完全满足您的要求,并且还可以清楚地表明矩阵的哪些条目尚未设置为有效的日期时间值。
DataTable = NaT(10,100);
Run Code Online (Sandbox Code Playgroud)
运行上面的代码行后,您可以循环遍历每个条目,并在读入时DataTable用实际对象覆盖它们。datetime
原答案:
我认为作者发布的解决方案repmat()在大多数情况下可能是最好的,但这是另一种可能的解决方案:
DataTable = datetime(zeros(10,100), zeros(10,100), zeros(10,100));
Run Code Online (Sandbox Code Playgroud)
或者
DataTable = zeros(10,100);
DataTable = datetime(DataTable, DataTable, DataTable);
Run Code Online (Sandbox Code Playgroud)
我编写了一些快速代码来将其性能与作者的repmat()方法进行比较。看起来此方法对于小型数组(约 100 个日期时间对象)来说要快一些,但repmat()对于大型数组(约 100 万个日期时间对象)来说要快得多。
然而,由于预分配通常只发生一次,因此速度可能并不像代码语义上的清晰程度那么重要。在这种情况下,我仍然会采用该repmat()解决方案,因为我认为更容易解释其代码的作用。
| 归档时间: |
|
| 查看次数: |
8628 次 |
| 最近记录: |