Sum row 2 and stop when 1 is reached in row 1
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Iris Willaert
il 14 Feb 2022
Commentato: Image Analyst
il 17 Feb 2022
Hi,
I have a array of two rows with the following numbers:
Row1: [0,0,1,0,0,0,1,0,0,1,0]
Row2: [0.0220,0.3110,0.0230,1.0550,0.0230,0.0456,0.1120,0.0400,0.0660,0.3690]
I want to take the sum of row 2: until row 1 contains 1.
for example: 0.0220+0.3110, 0.0230 + 1.0550 + 0.0230 +0.0456
I tried to do this with a loop but it doesn't give me want I want.
for i = Row1
if(i == 0)
sum(Row2)
break;
end
if(i == 1)
break;
end
end
can anyone help me with this?
Thanks a lot!
0 Commenti
Risposta accettata
Image Analyst
il 14 Feb 2022
Try using find():
Row1 =[0,0,1,0,0,0,1,0,0,1,0];
Row2 = [0.0220,0.3110,0.0230,1.0550,0.0230,0.0456,0.1120,0.0400,0.0660,0.3690];
oneIndexes = find(Row1 == 1)
% Find out where each stretch starts and stops.
startIndexes = [1, oneIndexes]
stopIndexes = [oneIndexes - 1, length(Row2)]
% Loop over each stretch, computing the sum in that stretch.
for k = 1 : length(startIndexes)
index1 = startIndexes(k);
index2 = stopIndexes(k);
theSums(k) = sum(Row2(index1 : index2));
end
theSums % Show in command window
2 Commenti
Image Analyst
il 17 Feb 2022
You're welcome. Can you click the "Accept this answer" link for the best answer and click the Vote icon for both answers. 🙂
Più risposte (1)
David Hill
il 14 Feb 2022
Modificato: David Hill
il 14 Feb 2022
m= [0,0,1,0,0,0,1,0,0,1;0.0220,0.3110,0.0230,1.0550,0.0230,0.0456,0.1120,0.0400,0.0660,0.3690];
%rows of the same matrix must be the same size
f=[1,find(m(1,:))];
for k=2:length(f)
s(k-1)=sum(m(2,f(k-1):f(k)-1));
end
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!