interp2 (V, k) из Matlab в Python - PullRequest
       43

interp2 (V, k) из Matlab в Python

0 голосов
/ 16 ноября 2018

Я пытаюсь преобразовать эту версию interp2 из Matlab в Python.В Matlab используется как

Vq = interp2(V,k)

, которые выполняют интерполяцию по матрице V, где каждый исходный интервал был рекурсивно подразделен k раз.Добавление в общей сложности 2^k-1 элементов для каждого подразделения.Однако я не нашел Python альтернативу этой функции.Я пробовал с scipy.interpolation.interp2, но работает только с тремя матрицами.

1 Ответ

0 голосов
/ 16 ноября 2018

Я нашел эту альтернативу на форуме , похоже на транскрипцию электронной почты, но я все равно вставлю здесь ответ.

import numpy as np


def interp2d_interleave(z,n):
    '''performs linear interpolation on a grid

    all points are interpolated in one step not recursively

    Parameters
    ----------
    z : 2d array (M,N)
    n : int
    number of points interpolated

    Returns
    -------
    zi : 2d array ((M-1)*n+M, (N-1)*n+N)
        original and linear interpolated values

    '''
    frac = np.atleast_2d(np.arange(0,n+1)/(1.0+n)).T
    zi1 = np.kron(z[:,:-1],np.ones(len(frac))) + np.kron(np.diff(z),frac.T)
    zi1 = np.hstack((zi1,z[:,-1:]))
    zi2 = np.kron(zi1.T[:,:-1],np.ones(len(frac))) + np.kron(np.diff(zi1.T),frac.T)
    zi2 = np.hstack((zi2,zi1.T[:,-1:]))
    return zi2.T

def interp2d_interleave_recursive(z,n):
    '''interpolates by recursively interleaving n times
    '''
    zi = z.copy()
    for ii in range(1,n+1):
        zi = interp2d_interleave(zi,1)
    return zi

Это следует использовать следующим образом

xyz = np.zeros((2, 2))
xyz = interp2d_interleave_recursive(xyz, 1)

И результат будет: enter image description here

...