我想找到一种向量化的方法来计算向量的累积和,但有上限和下限。
就我而言,输入仅包含 1 和 -1。您可以在答案中使用此假设。当然,也欢迎提供更通用的解决方案。
例如:
x = [1 1 1 1 -1 -1 -1 -1 -1 -1];
upper = 3;
lower = 0;
s = cumsum(x) %// Ordinary cumsum.
s =
1 2 3 4 3 2 1 0 -1 -2
y = cumsumlim(x, upper, lower) %// Cumsum with limits.
y =
1 2 3 3 2 1 0 0 0 0
^ ^
| |
upper limit lower limit
当累积总和达到上限(在第 3 个元素处)时,不再增加。同样,当累积和达到下限(在第 7 个元素处)时,它不会再减少。for 循环版本将是这样的:
function y = cumsumlim(x, upper, lower)
y = zeros(size(x));
y(1) = x(1);
for i = 2 : numel(x)
y(i) = y(i-1) + x(i);
y(i) = min(y(i), upper);
y(i) = max(y(i), lower);
end
end
你有什么想法?