Operations on consecutive elements of a vector

4 visualizaciones (últimos 30 días)
Saeid
Saeid el 8 de Feb. de 2016
Comentada: Saeid el 3 de Mzo. de 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?

Respuesta aceptada

dpb
dpb el 8 de Feb. de 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 comentarios
dpb
dpb el 9 de Feb. de 2016
Editada: dpb el 10 de Feb. de 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 el 3 de Mzo. de 2016
Thnaks a lot!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by