[Python] Trouble figuring out input arguments to SciPy RegularGridInterpolator for 2D...

Discussão em 'Python' iniciado por Stack, Setembro 27, 2024.

  1. Stack

    Stack Membro Participativo

    I'm trying to interpolate 2D data to find the value of Z at point (X,Y) as if it were a 2D lookup table.

    import numpy as np
    import pandas as pd
    from scipy.interpolate import RegularGridInterpolator
    import io

    xi, yi = 100, 100; # test points I want to evaluate the interpolator object at


    # the 2D data copied from google sheets and pasted into Jupyter notebook generates this dataframe:
    values = pd.read_csv(io.StringIO('''
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,221,220,219,218,217,217,215,215,215,217,217,218,218,219,220,221,222,222,222
    223,223,223,223,223,223,223,223,223,219,218,217,215,215,210,210,210,215,217,217,217,218,219,220,221,222,222
    223,223,223,223,223,223,223,223,223,218,217,217,215,210,207,207,207,210,215,215,217,218,219,219,220,221,222
    223,223,223,223,223,223,223,223,218,217,223,215,210,207,205,205,207,207,210,210,215,217,218,219,220,221,222
    223,223,223,223,223,223,223,223,218,217,216,215,207,205,203,203,205,207,207,210,215,217,218,219,220,221,222
    223,223,223,223,223,223,223,223,218,217,216,215,207,205,203,203,205,207,210,212,215,217,218,219,220,221,222
    223,223,223,223,223,223,223,223,223,218,217,217,215,207,205,205,207,210,212,215,217,218,219,220,221,222,223
    223,223,223,223,223,223,223,223,223,223,218,218,217,215,207,207,215,215,215,217,218,219,220,221,222,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223
    '''), header=None);

    # these are the X and Y values corresponding to the X and Y dimensions of the data (values).
    X = np.linspace(0, 2600, values.shape[1]);
    Y = np.linspace(0, 1700, values.shape[0]);

    Yi, Xi = np.meshgrid(Y, X);

    interp = RegularGridInterpolator((Y, X), values); # X and Y are switched here because Y corresponds to the rows of the dataframe and X corresponds to the columns but I'm matching the SciPy syntax.

    interp(np.array([[xi], [yi]]).T) # this is the portion I'm having trouble with


    I don't understand what the format of the arguments I'm putting into the interp object. From the documentation, it says that the input is a tuple of ndarrays. But this example shows evaluating the interp object on a np.array and on a tuple of lists. I've tried those and a combination of everything between but I'm still not getting it right... thanks for your help.

    The code as described above returns the following error:

    InvalidIndexError: (array([1]), array([1]))


    I'm trying to return the interpolation for a single point (every iteration of a for loop, for example). Or for all points at once after the for loop if it's necessary to do it that way.

    Continue reading...

Compartilhe esta Página