Scipy интерполяция, как изменить размер / пересчет матрицы 3x3 до 5x5?

РЕДАКТИРОВАТЬ: Пол решил эту задачу ниже. Спасибо!

Я пытаюсь преобразовать (масштабировать) матрицу 3x3 до 5x5, заполняя промежуточные точки либо с помощью interpolate.interp2d, либо с помощью interpolate.RectBivariateSpline (или что-то еще работает).

Если есть простая существующая функция для этого я бы хотел его использовать, но пока не нашел. Например, функция, которая будет работать так:

# upscale 2x2 to 4x4
matrixSmall = ([[-1,8],[3,5]])
matrixBig = matrixSmall.resample(4,4,cubic)

Итак, если я начну с матрицы / массива 3x3:

0,-2,0
-2,11,-2
0,-2,0

Я хочу вычислить новую матрицу 5x5 («I» означает интерполированное значение):

0, I[1,0], -2, I[3,0], 0
I[0,1], I[1,1], I[2,1], I[3,1], I[4,1]
-2, I[1,2], 11, I[3,2], -2
I[0,3], I[1,3], I[2,3], I[3,3], I[4,3]
0, I[1,4], -2, I[3,4], 0

I ' я искал, читал и пробовал различный тестовый код, но я не совсем понял правильный синтаксис того, что я пытаюсь сделать. Я также не уверен, нужно ли мне использовать meshgrid, mgrid или linspace в определенных строках.

РЕДАКТИРОВАТЬ: Исправлено и работает Спасибо Полу

import numpy, scipy
from scipy import interpolate

kernelIn = numpy.array([[0,-2,0],
             [-2,11,-2],
             [0,-2,0]])

inKSize = len(kernelIn)
outKSize = 5

kernelOut = numpy.zeros((outKSize,outKSize),numpy.uint8)

x = numpy.array([0,1,2])
y = numpy.array([0,1,2])

z = kernelIn

xx = numpy.linspace(x.min(),x.max(),outKSize)
yy = numpy.linspace(y.min(),y.max(),outKSize)

newKernel = interpolate.RectBivariateSpline(x,y,z, kx=2,ky=2)

kernelOut = newKernel(xx,yy)

print kernelOut
10
задан moski 7 April 2011 в 20:12
поделиться