Cumsum at different starting indices, append all previous value.

조회 수: 1 (최근 30일)
Jonathan Cheong
Jonathan Cheong 2021년 3월 2일
댓글: Jonathan Cheong 2021년 3월 3일
Hello, say I have 2 continuous dataset for example:
A = [0 0 8 0] B = [1 0 0 0 0.5 1.5 0]
The algorithm iterates over each element i = i +1 to check if element >= 0.5. If True cumsum starts.
Condition: Cumsum ends when exceeds 2 within 3 indices. Append the values and index.
The final cumsum value is not important, it is a means to set the condition of appending relevant values.
So result for A will give:
result = [0, 0, 8], idx = 1, 2, 3 NOT result = [ 0 0 8 '0']
However, if the condition is not met. Ignore the cumsum and move on to the next value.
e.g.: B will start 1st cumsum at [1]: 1 + 0 + 0 = 1. Which fails to meet the condition. Hence ignored.
It continues iterating, until reaching 0.5 which then starts another cumsum.
So result for B will give:
val = [1 0 0 0 0.5 1.5] NOT [1 0 0] [1 0 0 0 0.5 1.5 '0']
How can I approach this? Many thanks.
  댓글 수: 3
Jonathan Cheong
Jonathan Cheong 2021년 3월 3일
편집: Jonathan Cheong 2021년 3월 3일
Sure let me try to elaborate,
Say we iterate over each element: i = i + 1 to check if the element is >= 0.5
For A: Because both zero [0] [0] at index 1 and 2 is less than 0.5 the cumsum doesnt happen.
When it reaches element [8], which is greater than 0.5, it starts a cumsum.
8 + end because the cumsum >= 2, within 3 indices.
It appends all the previous value and the cumsum final value to storage.
Result = [0 0 8] NOT [0 0 8 '0']
For B: 1st element [1] is greater than 0.5 hence cumsum starts:
1 + 0 + 0 = 1. Because the sum does not exceed 2 and is within 3 indices, this cumsum is ignored.
Then the algorithm continutes to iterate the data, and starts cumsum at [0.5] because >= 0.5
[0.5] + [1.5] + end. Because the cumsum >= 2 within 3 indices.
Then, it appends all previous value until final cumsum value to storage. It doesn't include the final 0.
Result = [1 0 0 0 0.5 1.5] NOT [1 0 0] or [1 0 0 0 0.5 1.5 '0']
Note: The final cumsum value doesn't matter. It is just a means to set a condition so that correct data is appended.
Many thanks in advance
Jonathan Cheong
Jonathan Cheong 2021년 3월 3일
Here is my code, it doesn't work but hopefully this will help.
a = 0;
dd = [];
ind = [];
for row = idx
a = a + 1; % Iterate over each indices
if rain(idx(a)) >= 0.5 % If value >= 0.5 start cumsum
cs = cumsum(rain(idx(a):end);
cmp = find(cs <= 2); % Find index where cumsum ends
if numel(cmp) > 3
continue % If index >3, ignore this interval
end
% Append all relevant vlaues?
ind2 = a + cmp;
ind = [ind; ind2];
end
end
The files are also attached below.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by