For loop question with matrix

5 views (last 30 days)
Gko K
Gko K on 23 Mar 2019
Commented: Gko K on 25 Mar 2019
I have a matrix as below called A (60x3 double)
A = [10 3.5 -34.66
9 3.5 -35.6
8 3.5 -31.43
7 3.5 -29.04
6 3.5 -27.81
5 3.5 -26.59
4 3.5 -23.69
3 3.5 -16.47
2 3.5 2.94
1 3.5 24.03
5 3.5 25.86
4 3.5 35.98
3 3.5 55.89
2 3.5 91.82
1 3.5 101.5
6 3.5 -63.5
5 3.5 -67.03
4 3.5 -72.58
3 3.5 -80.98
2 3.5 -85.91
1 3.5 -63.15
7 3.5 -20.23
6 3.5 -19.92
5 3.5 -20.05
4 3.5 -19.69
3 3.5 -13.96
2 3.5 11.57
1 3.5 30.76
3 3.5 63.36
2 3.5 99.82
1 3.5 107.13
10 3.5 -47.09
9 3.5 -61.25
8 3.5 -61.89
7 3.5 -63.07
6 3.5 -65.29
5 3.5 -69.63
4 3.5 -76.96
3 3.5 -84.92
2 3.5 -80.39
1 3.5 -57.89]
I want to sum column 2 values until column 1 value is 1. I mean first sum must be on row 1 to row 10, and 2nd sum must be on row 15 to row 20, 3rd sum must be on row 21 to row 26 etc.
How can i do that with using for loop or another way?
  1 Comment
Adam Danz
Adam Danz on 23 Mar 2019
The number 1 is in the following rows of column 1:
>> find(A(:,1)==1)
ans =
10
15
21
28
31
41
so I'm having trouble figuring out what rule you're using to select row numbers.

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 23 Mar 2019
locs = [find(A(:,1)==1); size(A,1)+1];
tsum = cumsum([0;A(:,2)]);
output = tsum(locs(2:end)) - tsum(locs(1:end-1));
  10 Comments
Adam Danz
Adam Danz on 24 Mar 2019
Yeah, that was unclear to me from the beginning.
Gko K
Gko K on 24 Mar 2019
Edited: Gko K on 24 Mar 2019
Ok, thank you both, Sorry if i make you busy.
I have analysis results which are in a big excel table.
I want to split matrix as i show below:
My code runs true if i have 1 matrix. But i have a big table as shown in the pic.I want to run code for matrix 1 then matrix 2 then matrix 3 then matrix 4 then matrix 5 then matrix....n.
If you dont want to help no problem. Thanks for your previous helps friends.

Sign in to comment.


Adam Danz
Adam Danz on 24 Mar 2019
Edited: Adam Danz on 24 Mar 2019
"I want to sum column 2 values until column 1 value is 1."
With your input matrix "A", 's' is the sum of column 2 for each group.
% Create group numbers for each row
rowGroups = cumsum([0;A(1:end-1,1)] == 1)+1;
% Calculate sum of col 2 for each group
s = splitapply(@sum, A(:,2), rowGroups)
  5 Comments
Adam Danz
Adam Danz on 24 Mar 2019
We've all been there.

Sign in to comment.

Categories

Find more on MATLAB in Help Center and File Exchange

Tags

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!