Interpolating two arrays for a given value

Viewed 21

For every value of wavelength I have sets of two arrays of equal dimensions, how do I interpolate those arrays at different wavelength to get two arrays for every wavelength I desire?

for eg. if

wavelength = [91]

I have

a = [9,3,7,2,5]
b = [2,8,3,7,6]

similarly for

wavelength = [100]

I have

a = [3,5,2,6,7]
b = [5,0,1,7,4]

and so on for various wavelength, now I want to get a and b for every wavelength through interpolation, any ideas on how to do that?

I am hoping for something like -

for

x = [[1,2,3,4,5],[5,4,3,2,1],[2,6,3,8,5],[3,7,3,8,9]]
y = [[8,3,5,7,0],[1,4,2,5,3],[1,5,3,0,9],[5,8,7,2,4]]
wavelength = [91,100,110,131]

f = interpolate(wavelength, x, y)

and expect to get a and b arrays when I call f(102) for wavelength 102

1 Answers

There is probably a better way, but for now, you can do something like this,

import numpy as np
from scipy.interpolate import interp1d

wavelength = np.array([91,100,110,131])
x = np.array([[1,2,3,4,5],[5,4,3,2,1],[2,6,3,8,5],[3,7,3,8,9]])
y = np.array([[8,3,5,7,0],[1,4,2,5,3],[1,5,3,0,9],[5,8,7,2,4]])

# Your new wavelengths
wavelength_new = np.array([95, 102, 110]) 

xx = np.zeros((len(wavelength_new), x.shape[1]))
yy = np.zeros((len(wavelength_new), y.shape[1]))
for i,j in zip(range(x.shape[1]), range(y.shape[1])):
    x_interp = interp1d(wavelength, x[:, i])
    y_interp = interp1d(wavelength, y[:, j])
    for k in range(len(wavelength_new)):
        xx[k, i] = x_interp(wavelength_new[k])
        yy[k, j] = y_interp(wavelength_new[k])
print(xx)
print(yy)

Output:

[[2.77777778 2.88888889 3.         3.11111111 3.22222222]
 [4.4        4.4        3.         3.2        1.8       ]
 [2.         6.         3.         8.         5.        ]]
[[4.88888889 3.44444444 3.66666667 6.11111111 1.33333333]
 [1.         4.2        2.2        4.         4.2       ]
 [1.         5.         3.         0.         9.        ]]
Related