編輯:保羅已經解決了這一個下面。謝謝!Scipy插值如何調整大小/重新取樣3x3矩陣到5x5?
我想重新取樣(高檔)3x3矩陣到5x5,用interpolate.interp2d或interpolate.RectBivariateSpline(或任何工程)填充中間點。
如果有一個簡單的,現有的功能來做到這一點,我想使用它,但我還沒有找到它。例如,一個功能,將工作,如:
# upscale 2x2 to 4x4
matrixSmall = ([[-1,8],[3,5]])
matrixBig = matrixSmall.resample(4,4,cubic)
所以,如果我開始一個3×3矩陣/數組:
0,-2,0
-2,11,-2
0,-2,0
我要計算一個新的5x5矩陣(「我」的意思插值值):
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
我一直在尋找和閱讀並嘗試各種不同的測試代碼,但我還沒有完全想通了什麼,我試圖做正確的語法。我也不確定是否需要在某些行中使用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
非常感謝您的快速解決方案!這正是我所期待的。我曾嘗試過linspace,但格式錯誤,我完全錯過了kx,ky。 – moski 2011-04-07 20:08:55