Operations on consecutive elements of a vector

8 vues (au cours des 30 derniers jours)
Saeid
Saeid le 8 Fév 2016
Commenté : Saeid le 3 Mar 2016
Imagine there is a vector C with n elements, c(i). Without using a loop I would like to a have new vector D whose elements are:
d(i)= c(i) if i=1
d(i)= c(i-1)-c(i) if 1<i<n
d(i)= -c(i) if i=n
I do not care about the first and last elements which I could add by concatenation, but generally I am looking for a way to perform mathematical operations on consecutive elements of a vector without using a loop. Is this possible?

Réponse acceptée

dpb
dpb le 8 Fév 2016
If'en I interprets your requirements correctly...
d=[c(1) diff(c(1:end-1)) -c(end)];
Example:
>> c=randi(10,1,5)
c =
9 9 4 7 3
>> d=[c(1) diff(c(1:end-1)) -c(end)]
d =
9 0 -5 3 -3
>>
  6 commentaires
dpb
dpb le 9 Fév 2016
Modifié(e) : dpb le 10 Fév 2016
All depends on what the operation(s) is(are); sometimes it's easily vectorized, other times "not so much". filter can do many operations but not all. See
help datafun % for list to give some ideas on what's builtin
After that, it's mostly just thinking about the operations and using "time in grade" to apply Matlab syntax to the particular case.
Oh, and it helps if you're reasonably fluent in matrix algebra and have some knowledge of some of the special properties of matrices so that can recognize when magic occurs...
ADDENDUM
Oh, I am not into image processing so didn't think of it originally, but there's blockproc in that toolbox or, if you don't have access to it a submission in the File Exchange (not tried)... Apply function on subsets of array>
Saeid
Saeid le 3 Mar 2016
Thnaks a lot!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements 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!

Translated by