Как сделать линейную интерполяцию для многомерных массивов в Numpy? - PullRequest
0 голосов
/ 10 июля 2020

Возникли проблемы с реализацией линейной интерполяции в 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 будет иметь такую ​​функцию интерполяции, но пока не смог найти ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...