cumsum that restarts whenever it reaches certain level
1 回表示 (過去 30 日間)
古いコメントを表示
Good evening I have a matrix A 250*3, i try to do the following: the first time that the cumsum "of raws" is > 0.02 or lower than -0.02, i replace the corresponding value in matrix A with zero and restart the cumsum form the value after the zero. then we repeat this once more: the first time the new cumsum becomes >0.02 or <-0.02 we replace it with zero and restart the cum sum we repeat this untill we arrive to the last raw of the matrix. **with one condition like (cumsum>0.02) i have the following code.. However, i didn't arrive to add the new condition that (cumsum<-0.02).
x = unifrnd(-5,5,[250,2])/100;
cum=cumsum(x);
thresh = 0.02;
while 1
xc = cumsum(x);
k = find(xc > thresh,1,'first');
if isempty(k)
% done
break
end
x(k) = -xc(k-1);
end
Thank you in advance for your help
2 件のコメント
Image Analyst
2014 年 10 月 15 日
Why do you need this unusual thing anyway? Are you sure it's really necessary ?
採用された回答
Roger Stafford
2014 年 10 月 15 日
I think your code only works on one column at a time. It also appears to have the disadvantage that each time your cumulative sum exceeds the threshold, you have to recompute the cumsum for the entire column. I would think a simple for-loop method would be more efficient.
[m,n] = size(A);
for c = 1:n
s = 0;
for r = 1:m
s = s + A(r,c);
if abs(s) > .02
A(r,c) = A(r,c) - s;
s = 0;
end
end
end
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!