Единственное, что нужно изменить, - это сделать t
массивом и (как заметил @hpaulj) использовать np.sin()
вместо math.sin()
, например ::
import numpy as np
import math
t = [10,20,30]
minVal = 0
maxVal = 100
converedMinVal = 0
converedMaxVal = 1
newT = np.interp(t ,[minVal,maxVal],[converedMinVal,converedMaxVal])
value = np.sin(newT * math.pi / 2)
print value
... для которого вывод:
[ 0.15643447 0.30901699 0.4539905 ]
(EDIT)
Похоже, вы можете захотеть интерполировать t[0]
в [minVal[0], maxVal[0]]
и интерполировать t[1]
в [minVal[1], maxVal[1]]
и т. Д. В этом случае вы можете использовать scipy.interpolate.interp2d()
, который создает функцию, которая интерполирует в два измерения, например следующим образом:
import numpy as np
import scipy.interpolate as spi
import math
t= [10,20,30]
minVal = [0, 11, 15]
maxVal = [100, 200, 500]
x = list(range (len(t)))*2
y = minVal + maxVal
converedMinVal = [0, 2, 10]
converedMaxVal = [1, 8, 20]
z = converedMinVal + converedMaxVal
f = spi.interp2d(x, y, z)
newT = np.diag(f(range(len(t)),t))
value = np.sin(newT * math.pi / 2)
print value
Функция f()
интерполирует во всех комбинациях своих двух векторных параметров и возвращает матрицу, поэтому, если вы хотите только интерполяцию в моменты времени в t
, вам нужно взять диагональ этой матрицы, как я сделано здесь.
Я должен отметить, что подход scipy
выполняет намного больше вычислений, чем на самом деле необходимо для решения этой проблемы, но это не может быть проблемой в вашем случае.