【发布时间】:2012-02-16 02:42:30
【问题描述】:
我有两个包含时间的数组。第一个是指示何时打开电源的设备状态,第二个数组是发出给设备的实际命令的时间戳。见下图:
垂直虚线表示开机命令,蓝线表示设备状态(1=开启 0=关闭)。
我想要做的是创建一个矩阵来匹配设备响应的命令。问题是它们不是一对一的。有冗余命令和额外的电源循环(来自手动操作等)。理想情况下,我想将非命令状态更改与命令列中的 NaN 配对,类似地,任何冗余命令或不会导致状态更改为状态列中的 NaN 的命令。请参阅下面的示例数据和所需的输出:
indicatesOn = [1 2 3 4 5];
commandIssue = [1.9 2.8 2.9 4.8 4.9 5.1]
matchedOutput =
NaN 1.0000
1.9000 2.0000
2.8000 NaN
2.9000 3.0000
NaN 4.0000
4.8000 NaN
4.9000 5.0000
5.1000 NaN
所以基本上命令时间在第 1 列,开机在第 2 列。命令列中的 NaN 表示没有先前的命令来改变状态(设备的手动操作)。 State/power-on 列中的 NaN 表示设备未响应该特定命令(已启动或已发出多个命令)。
我开始尝试解决这个问题,结果陷入了一堆 for 循环和大量 if/else 逻辑,并认为必须有更好的方法。
感谢任何帮助!
编辑:
【问题讨论】:
-
我可能过于复杂了,但这类似于生物学中的序列比对,我相信基于动态编程的方法可能是理想的。如果你有生物信息学工具箱,你可以使用函数
samplealign来做。 -
您可能会看到一个类似(但肯定不一样)的问题:stackoverflow.com/questions/2142826/…
-
@jonnat 我无权使用那个工具箱......而且我认为当我阅读
samplealign的文档时我有轻微的脑动脉瘤。 -
您最好将代码作为答案发布并从问题中删除。
-
@yuk 我不太确定回答你自己的问题是否完全是无稽之谈,因为回答你自己的问题时会弹出警告。但是,我按照您的建议移动了它。
标签: matlab