Uys of Spades
Uys of Spades

Reputation: 569

How to Create an Evenly spaced Numpy Array from Set Values

I am looking to create a an array via numpy that generates an equally spaced values from interval to interval based on values in a given array.

I understand there is:

np.linspace(min, max, num_elements)

but what I am looking for is imagine you have a set of values:

arr = np.array([1, 2, 4, 6, 7, 8, 12, 10])

When I do:

 #some numpy function
arr = np.somefunction(arr, 16)

>>>arr
>>> array([1, 1.12, 2, 2.5, 4, 4.5, etc...)] 
# new array with 16 elements including all the numbers from previous 
# array with generated numbers to 'evenly space them out'

So I am looking for the same functionality as linspace() but takes all the elements in an array and creates another array with the desired elements but evenly spaced intervals from the set values in the array. I hope I am making myself clear on this..

What I am trying to actually do with this set up is take existing x,y data and expand the data to have more 'control points' in a sense so i can do calculations in the long run.

Thank you in advance.

Upvotes: 2

Views: 4514

Answers (1)

John Zwinck
John Zwinck

Reputation: 249133

xp = np.arange(len(arr)) # X coordinates of arr
targets = np.arange(0, len(arr)-0.5, 0.5) # X coordinates desired
np.interp(targets, xp, arr)

The above does simple linear interpolation of 8 data points at 0.5 spacing for a total of 15 points (because of fenceposting):

array([  1. ,   1.5,   2. ,   3. ,   4. ,   5. ,   6. ,   6.5,   7. ,
         7.5,   8. ,  10. ,  12. ,  11. ,  10. ])

There are some additional options you can use in numpy.interp to tweak the behavior. You can also generate targets in different ways if you want.

Upvotes: 5

Related Questions