[SciPy-User] faster interpolations (interp1d)

josef.pktd@gmai... josef.pktd@gmai...
Wed Mar 2 07:56:27 CST 2011


On Tue, Mar 1, 2011 at 9:03 AM, eat <e.antero.tammi@gmail.com> wrote:
> Hi,
>
> On Tue, Mar 1, 2011 at 1:01 PM, James McCormac <jmccormac01@qub.ac.uk>
> wrote:
>>
>> Hi eat,
>> Yes this code works fine, its not actually that bad on a 2x500 arrays ~5
>> but the 500 length arrays are the shortest I can run with. I am analyzing
>> CCD images which can go up 2000x2000 in length and breadth, meaning 2x2000
>> 1d arrays after collapsing the spectra. This takes >20 sec per image which
>> is much too long. Ideally the id like it to run as fast as possible
>> (depending on how much accuracy I can maintain).
>> Yes the code works fine its just a little slow, I've put timers in and 98%
>> of the time is taken up by the interpolation.  Any improvement in
>> performance would be great. I've slimmed  down the rest of the body as much
>> as possible already.
>
> Can you provide a minimal working code example, which demonstrates the
> problem? At least you'll get better idea how it performs on some other
> machine.
>
> Regards,
> eat
>>
>> Cheers
>> James
>>
>> On 1 Mar 2011, at 07:31, eat wrote:
>>
>> Hi James,
>>
>> On Mon, Feb 28, 2011 at 5:25 PM, James McCormac <jmccormac01@qub.ac.uk>
>> wrote:
>>>
>>> Hi eat,
>>> you sent me a suggestion for faster 1d interpolations using matrices a
>>> few
>>> weeks back but I cannot find the email anywhere when I looked for it
>>> today.
>>>
>>> Here is a better explanation of what I am trying to do. For example I
>>> have
>>> a 1d array of 500 elements. I want to interpolate them quadratically so
>>> each array becomes 10 values, 50,000 in total.
>>>
>>> I have 500x500 pixels and I want to get 0.01 pixel resolution.
>>>
>>> code snipet:
>>> # collapse an image in the x direction
>>> ref_xproj=np.sum(refarray,axis=0)
>>>
>>> # make an array for the 1d spectra
>>> x = np.linspace(0, (x_2-x_1), (x_2-x_1))
>>>
>>> # interpolation
>>> f2_xr = interp1d(x, ref_xproj, kind='quadratic')
>>>
>>> # new x array for interpolated data
>>> xnew = np.linspace(0, (x_2-x_1), (x_2-x_1)*100)
>>>
>>> # FFT of interpolated spectra
>>> F_ref_xproj = fftpack.fft(f2_xr(xnew))
>>>
>>> Can I do this type of interpolation faster using the method you described
>>> before?
>>
>> I'll misinterpreted your original question and the method I suggested
>> there is not applicable.
>> To better understand your situation, few questions:
>> - what you described above; it does work for you in technical sense?
>> - if so, then the problem is with the execution performance?
>> - what are your current timings?
>> - how much you'll need to enhance them?
>> Regards,
>> eat
>>>
>>> Cheers
>>> James

Just a thought since I don't know the details:

using fft interpolation might be faster, e.g. signal.resample

>>> t = np.linspace(0,10,25)
>>> x = np.sin(t)
>>> t2 = np.linspace(0,10,50)
>>> x2 = signal.resample(x,50)

scipy.ndimage.interpolation  should also be faster, if there is
something that does what you want.

Josef



>>>
>>>
>>>
>>> _______________________________________________
>>> SciPy-User mailing list
>>> SciPy-User@scipy.org
>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>> -------------------------------------------------
>> James McCormac
>> jmccormac01@qub.ac.uk
>> Astrophysics Research Centre
>> School of Mathematics & Physics
>> Queens University Belfast
>> University Road,
>> Belfast, U.K
>> BT7 1NN,
>> TEL: 028 90973509
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>


More information about the SciPy-User mailing list