【发布时间】:2010-07-08 08:34:08
【问题描述】:
这个问题与How can I perform this cumulative sum in MATLAB?有关。
是否可以使用两个条件来执行 cumsum?还是只有一个条件?
已编辑:
data = [1 22 20;... %# Initial data
1 22 22;...
1 22 20;...
1 44 11;...
0 44 12;...
1 33 99;...
1 33 20;...
1 33 50];
我想找到满足两个条件的累积和:
% 1) current row in column 1 = 1 && previous row in column 1==1;
% 2) current row in column 2 = previous row in column 2
data(:,4) = cumsum(data(:,3)); % Add a 4th column containing
% the cumulative sum of column 3
index = diff([0;data(:,1)])> 0 && diff([0;data(:,2); 0])~= 0;
offset = cumsum(index.*(data(:,4)-data(:,3)));
data(:,4) = data(:,4)-offset;
index = (data(:,1) == 0);
data(index,4) = data(index,3)
预期输出:
data = [1 22 20 20 >> 20 + 0
1 22 20 40 >> 20 + 20
1 44 11 84 >> 11 + 40
0 44 12 12 >> 12 + 0
1 33 99 99 >> 99 + 0
1 33 20 119 >> 20 + 99
0 33 50 50 >> 50 + 0
编辑: 使用下面的代码,我得到了错误的输出。
index = diff([0;data(:,1)])> 0 & diff([0;data(:,2)])~=0
1 22 20 20
1 22 22 42
1 22 20 62
1 44 11 73 %this supposed to be 11 not 73 ..
0 44 12 12
1 33 99 99
1 33 20 119
1 33 50 169
【问题讨论】:
-
您的代码会产生什么错误?如果您不告诉我们,我们会发现(更)难以诊断您的问题。您的数据样本也会有所帮助。
-
??? || 的操作数和 && 运算符必须可转换为逻辑标量值。
-
您似乎真的想要一种分段累积总和,也就是说,每次第 2 列发生变化时,累积总和就开始计算——这是否正确?
-
另外,为什么
data(3,4) = 84在你的例子中?不应该是11和data(4,4) = 11吗?
标签: matlab cumulative-sum