Search code examples
pythonnumpyscipyinterpolation

Interpolate 2d numpy array to change shape


I've a numpy array of shape (960, 2652), I want to change its size to (1000, 1600) using linear/cubic interpolation.

>>> print(arr.shape)
(960, 2652)

I've check this and this answer, which recommends to use scipy.interpolate.interp2d, but what should I provide as x and y?

from scipy import interpolate
f = interpolate.interp2d(x, y, arr, kind='cubic')

Solution

  • The datapoints on the old domain, i.e.

    import numpy as np
    from scipy import interpolate
    from scipy import misc
    import matplotlib.pyplot as plt
    
    arr = misc.face(gray=True)
    
    x = np.linspace(0, 1, arr.shape[0])
    y = np.linspace(0, 1, arr.shape[1])
    f = interpolate.interp2d(y, x, arr, kind='cubic')
    
    x2 = np.linspace(0, 1, 1000)
    y2 = np.linspace(0, 1, 1600)
    arr2 = f(y2, x2)
    
    arr.shape # (768, 1024)
    arr2.shape # (1000, 1600)
    
    plt.figure()
    plt.imshow(arr)
    plt.figure()
    plt.imshow(arr2)