【发布时间】:2021-01-24 07:53:53
【问题描述】:
我有一个包含两列的矩阵。
第一列是一组由 0 和 1 组成的数据。
column tow 是一组每天的时间数据。
下面是一个示例数据:
0 2020-01-01
1 2020-01-01
1 2020-01-01
0 2020-01-01
1 2020-01-01
1 2020-01-01
0 2020-01-01
1 2020-01-02
0 2020-01-02
...
当一天内先前数据的累积量大于特定数字时,我想将以下数据设置为零。
根据示例数据,如果具体数字设置为2,则将2020-01-01的数据转换为如下数据:
0 2020-01-01
1 2020-01-01
1 2020-01-01
0 2020-01-01
0 2020-01-01
0 2020-01-01
0 2020-01-01
这是我如何在一天内完成的:
for i = 1:7
if cumsum(data(1:i,1) > 2)
then data(i) = 0
end
end
但我还没有弄清楚如何递归地做到这一点。
递归的意思是当总和大于特定数字时,第二天的数据会重新计算总和,并将后面的数据转换为0。
根据上面的例子:
1 2020-01-01
1 2020-01-01
0 2020-01-01
1 2020-01-02
0 2020-01-02
0 2020-01-02
1 2020-01-02
1 2020-01-02
0 2020-01-02
1 2020-01-02
...
第二天的数据会这样转换:
0 2020-01-01
1 2020-01-01
1 2020-01-01
0 2020-01-01
0 2020-01-01
0 2020-01-01
0 2020-01-01
1 2020-01-02
0 2020-01-02
0 2020-01-02
1 2020-01-02
0 2020-01-02
0 2020-01-02
0 2020-01-02
...
你可以看到两个不同日期的数据是用同一个进程分开处理的。
我只知道必须将cumsum设置为零并在日期更改时重新计算cumsum。
有没有办法递归呢?
非常感谢!
油箱
【问题讨论】:
标签: matlab