我希望找到一种向量化方法来计算一个向量的累积和,但加上了上下限。
在我的情况下,输入仅包含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
当累加总和达到上限(在第三个元素处)时,它不会再增加。同样,当累加总和达到下限(在第七个元素处)时,它不会再减少。一个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
你有什么想法吗?
x
是否仅包含1
和-1
? - Divakarx
可以包含的内容,要么选择更具代表性的x
。首先让它超出限制的范围1
以上和/或以下,让它多次违反同一限制,并且最重要的是,如Divakar所提到的,如果x
可以包含其他数字,请包含一些。 - Dan