2015-01-05 2 views
0

У меня есть несколько массивов 1D с различной частотой дискретизации. Я бы хотел перепрограммировать все массивы. Есть ли у вас какие-либо предложения?Матричная интерполяция с использованием python

Массивы таковы:

a=[-9494 -9496 -9498 ..., -9513 -9516 -9514] 

b=[-9494 -9498 -9502 ..., -9506 -9510 -9514] 

Я прочитал scipy.interpolate.interp1d документацию. Но я не нашел способ сделать это с частотой выборки.

Есть ли у вас какие-либо предложения?

Заранее благодарен!

+0

Знаете ли вы, что частота дискретизации? Или все массивы охватывают один и тот же известный временной интервал? – xnx

+0

Да, это 50 Гц. Массивы не имеют одинакового интервала времени, это следующий шаг, чтобы заполнить пробелы, чтобы иметь массивы с одинаковым интервалом времени. – CatarinaCM

+0

Затем вам нужно создать массив значений времени для каждого массива, например. 'np.arange' или' np.linspace'. – xnx

ответ

0

Вы можете создать массивы значений времени для каждого массива и использовать их в качестве x значений interp1d:

import numpy as np 
from scipy.interpolate import interp1d 

a = np.array([-9494, -9496, -9498, -9513, -9516, -9514]) 
b = np.array([-9494, -9498, -9502, -9506, -9510, -9514]) 

dta, dtb = 1/4., 1/5. # example sampling rates 

na = len(a) 
nb = len(b) 
amax, bmax = (na-1)*dta, (nb-1)*dtb 
ta = np.linspace(0, amax, na) 
tb = np.linspace(0, bmax, nb) 
ainterp = interp1d(ta, a) 
binterp = interp1d(tb, b) 

tmax = min(ta[-1], tb[-1]) 
target_sampling = 50 
ngrid = int(tmax * target_sampling + 1) 
tgrid = np.linspace(0, tmax, ngrid) 
afine = ainterp(tgrid) 
bfine = binterp(tgrid) 

import pylab 
pylab.plot(ta, a, 'o') 
pylab.plot(tgrid, afine,'.') 
pylab.plot(tb, b, 'o') 
pylab.plot(tgrid, bfine,'.') 
pylab.show() 

Является ли это то, что вам нужно? enter image description here

Смежные вопросы