微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

展开 datenum 向量

如何解决展开 datenum 向量

我正在尝试创建一个 datevec 系列的日期和时间,间隔 20 分钟,分钟列正好是 0、20 和 40,并具有给定的开始和结束时间。首先我创建一个 20 分钟的差异值

datenum_20_min_diff = datenum( [ 2021,1,27,17,0 ] ) - datenum( [ 2021,16,40 ] ) ;

然后尝试创建所需的datevec系列

s = datevec( ( datenum([2021,22,0]) : datenum_20_min_diff : datenum([2021,28,11,0]) )' ) ;

适用于前几个条目,但随后偏离了我的预期。我得到的是(为了便于查看,分钟列稍微整理了一下)

2.0210e+03   1.0000e+00   2.7000e+01   2.2000e+01    0            0
2.0210e+03   1.0000e+00   2.7000e+01   2.2000e+01   20            0
2.0210e+03   1.0000e+00   2.7000e+01   2.2000e+01   40            0
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01    0            0
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01   19   6.0000e+01
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01   39   6.0000e+01
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01   59   6.0000e+01

我想要/期望的是

2.0210e+03   1.0000e+00   2.7000e+01   2.2000e+01    0   0
2.0210e+03   1.0000e+00   2.7000e+01   2.2000e+01   20   0
2.0210e+03   1.0000e+00   2.7000e+01   2.2000e+01   40   0
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01    0   0
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01   20   0
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01   40   0       
2.0210e+03   1.0000e+00   2.7000e+01   2.3000e+01    0   0

我做错了什么?

解决方法

没有“漂移”。只是在某些时候,您的 20 分钟间隔开始表示为 19 分 60 秒(=20 分钟)。

我不知道为什么,但理论上两者是等价的,你不应该关心它。如果您担心“格式化”日期以获得更具视觉意义的输出,请使用格式化功能。例如。 datestr(s) 会给你你所期望的。

PS:“20 分钟表示为一天 24 小时的一部分”很简单20 / 24 / 60。不需要第一行。

,

我通过“清理”输出解决了我的问题。 “清理”代码如下所示,

Fortran

以我想要的格式输出。

回复:Tasos Papastylianou 的回答 - 使格式恰到好处很重要,因为稍后在我的代码中,我使用带有可选“rows”参数的 ismember 函数,因此不同行的格式必须匹配。>

回复:Tasos Papastylianou 的评论 - 这是一个更大项目的一部分,我阅读了文件的最后一行,其中日期和时间以 datevec 形式表示,并且最终将附加新的处理过的数据。使用 datvec 格式似乎更容易,特别是因为通过查找 datevec 列中的特定值更容易进行上述处理。也可以更轻松地查看 datevec 数据并检查代码是否按预期工作,并且不会像处理原始问题那样潜在地在处理管道下游造成问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。