Cumulative sum between two trues in array according to positions stored in logical array

3 次查看(过去 30 天)
Hello!
I would like to find a fast way to get cumulative sums of values of an array according to the starting and ending positions given by a logical array,
for instance:
v=[0;1;2;0;2;4;5;6;2;3;4];
pos=[true;false;true;false;false;true;false;true;false;false;true];
I would like the code to cumulative sum vector "x" between two trues, getting the following result:
result=[3;8;15;15]; %I summed [2+1+0;4+2+0+2;6+5+4;4+3+2+6]
Hope that the question is clear, thank you!

采纳的回答

Matt J
Matt J 2022-10-17
编辑:Matt J 2022-10-17
v=[0;1;2;0;2;4;5;6;2;3;4];
pos=[true;false;true;false;false;true;false;true;false;false;true];
cv=cumsum(v);
I=find(pos);
result = cv(I(2:end))-cv(I(1:end-1)) +v(I(1:end-1))
result = 4×1
3 8 15 15

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

产品


版本

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by