adding next values in an array
16 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Nikolas Spiliopoulos
le 17 Fév 2017
Modifié(e) : Nikolas Spiliopoulos
le 17 Fév 2017
hi all, I have a question
I have a vector like this [1;2;3;-5;-6;2;3], when it's negative i would like to add in the next value and get something like that [1;2;3;-5;-11;-9;-6]. Which means when it's negative it starts adding the next value!
the thing is that i have an array with 48x258 dimensions, so the example above would be for each column!
thanks a lot!
4 commentaires
Alexandra Harkai
le 17 Fév 2017
Modifié(e) : Alexandra Harkai
le 17 Fév 2017
In this case -5 is negative so the next element will be -6+(-5)=-11. Then -11 is negative so the next element will be 2+(-11)=-9. Which is negative so the next becomes 3+(-9)=-6 which is negative so would you want to do anything with it?
I could be totally wrong understanding your logic.
Réponse acceptée
Guillaume
le 17 Fév 2017
Modifié(e) : Guillaume
le 17 Fév 2017
M = [1 2 3 -5 -6 2 3]' %demo data
M + cumsum([zeros(1, size(M, 2)); M(1:end-1, :)] .* (cumsum(M<0, 1)>1), 1)
Will do what you want on any sized matrix.
Explanation of above code:
- M<0 finds sign of M
- cumsum(M<0, 1) will be 1 or more at the first negative value in each column
- cumsum(M<0, 1)>1 will be one after the first negative value all the way down
- [zeros(1, size(M, 2)); M(1:end-1, :)] is M shifted down by one row
- 4.*5 filters the shifted M so that all positive values before the first negative values are 0 AND the first negative value is 0
- cumsum of 6 + M is the desired result
1 commentaire
Plus de réponses (1)
Alexandra Harkai
le 17 Fév 2017
Considering the last element on a column will not be added to any other elements, you can loop through the whole thing:
function [a] = addNegatives(a)
for col = 1:size(a,2) % for each column
for k = 1:size(a, 1)-1 % don't do it for the last element
if a(k, col) < 0
a(k+1, col) = a(k, col) + a(k+1, col);
end
end
end
end
0 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!