Operations on consecutive elements of a vector
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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?
0 comentarios
Respuesta aceptada
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
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>
Más respuestas (0)
Ver también
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!