Numeric, vectorization

R

RonnyM

Hello.

I want to vectorize this operation, which below is implemented as a
for-loop:

def smoothing_loop( y ): #y is an array with noisy values
ybar = []
ybar.append( y[0] )
#Smoothing with a loop
length = size( y )
for i in range( 1, length -1 ):
ybar.append( .5 * ( y[ i-1 ] + y[ i + 1 ] ) )

e.g. y = [ 1, 2, 3, 4, 5, 6 ,7 ,8, 9 ]

ybar = [ 1, (1 + 3)*.5,(2 + 4)*.5,(3 + 5)*.5,..., (n-1 + n+1)*.5 ], n =
1,...len(y) -1

How do I make a vectorized version of this, I will prefer not to
utilize Map or similar functions, but numeric instead.


Regards,

Ronny Mandal
 
D

David Isaac

RonnyM said:
e.g. y = [ 1, 2, 3, 4, 5, 6 ,7 ,8, 9 ]
ybar = [ 1, (1 + 3)*.5,(2 + 4)*.5,(3 + 5)*.5,..., (n-1 + n+1)*.5 ], n =
1,...len(y) -1
How do I make a vectorized version of this, I will prefer not to
utilize Map or similar functions, but numeric instead.


You treat the first element asymmetrically, so that does not vectorize.
The rest does:
import numpy as N
y=N.arange(1,10)
slice1 = slice(0,-2,1)
slice2 = slice(2,None,1)
ybar = 0.5*(y[slice1]+y[slice2])
ybar
array([ 2., 3., 4., 5., 6., 7., 8.])

hth,
Alan Isaac
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top