Интерполировать массив 2d numpy, чтобы изменить форму - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть numpy массив формы (960, 2652), я хочу изменить его размер на (1000, 1600), используя линейную / кубическую c интерполяцию.

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

У меня есть проверка это и это ответ, который рекомендует использовать scipy.interpolate.interp2d, но что я должен предоставить как x и y?

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

1 Ответ

1 голос
/ 25 февраля 2020

Точки данных на старом домене, т.е.

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)
...