gpt4 book ai didi

python - Scipy 插值如何将 3x3 矩阵调整大小/重新采样为 5x5?

转载 作者:太空狗 更新时间:2023-10-29 18:21:31 26 4
gpt4 key购买 nike

编辑: Paul 在下面解决了这个问题。谢谢!

我正在尝试将 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

我一直在搜索、阅读和尝试各种不同的测试代码,但我还没有完全弄清楚我正在尝试做的事情的正确语法。我也不确定我是否需要在某些行中使用 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

最佳答案

只有两个小问题:

1) 你的 xx,yy 超出了 x,y 的范围(你可以推断,但我猜你不想这样做。)

2) 对于 3(默认)的 kx 和 ky,您的样本量太小。将其降低到 2 并获得二次拟合而不是三次拟合。

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),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
##[[ 0. -1.5 -2. -1.5 0. ]
## [ -1.5 5.4375 7.75 5.4375 -1.5 ]
## [ -2. 7.75 11. 7.75 -2. ]
## [ -1.5 5.4375 7.75 5.4375 -1.5 ]
## [ 0. -1.5 -2. -1.5 0. ]]

关于python - Scipy 插值如何将 3x3 矩阵调整大小/重新采样为 5x5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com