Возникли проблемы с реализацией линейной интерполяции в numpy
, которая работает для массивов nD. Я хотел бы, чтобы простое решение работало для 1D, а также для 3D-массивов.
Для линейной интерполяции я использую np.interp
, который отлично работает для 1D:
x = [1, 2, 3, 4, 5]
xp = [1, 3, 5]
fp = [10, 30, 50]
np.interp(x, xp, fp)
Out: array([10., 20., 30., 40., 50.])
Теперь, если my fp
имеет несколько столбцов:
fp_multicol = np.array([10, 30, 50, 100, 300, 500]).reshape((2,3))
Out:
array([[ 10, 30, 50],
[100, 300, 500]])
Это не работает напрямую с np.interp
, так как может обрабатывать только одномерные массивы:
np.interp(x, xp, fp_multicol)
Traceback (most recent call last):
blablabla
ValueError: object too deep for desired array
Итак, я придумал for
-l oop в понимании списка:
np.array([np.interp(x, xp, col) for col in fp_multicol])
array([[ 10., 20., 30., 40., 50.],
[100., 200., 300., 400., 500.]])
Но тогда это не работает для одномерных массивов ...
np.array([np.interp(x, xp, col) for col in fp])
Traceback (most recent call last):
blablabla
ValueError: object of too small depth for desired array
Любое быстрое и простое решение, которое будет работать для обоих?
Я ожидал бы, что numpy
будет иметь такую функцию интерполяции, но пока не смог найти ее.