Python 二维矩阵中的插值
我尝试在二维数组上插值,其中数组的值在零之间,我想用接近或接近这些值的值替换这些值,我已经回顾了几个示例,但我的搜索没有成功,我尝试了以下插值代码Python 二维矩阵中的插值,python,numpy,raster,Python,Numpy,Raster,我尝试在二维数组上插值,其中数组的值在零之间,我想用接近或接近这些值的值替换这些值,我已经回顾了几个示例,但我的搜索没有成功,我尝试了以下插值代码 import numpy as np from scipy import interpolate mymin,mymax = 0,3 X = np.linspace(mymin,mymax,4) Y = np.linspace(mymin,mymax,4) x,y = np.meshgrid(X,Y) test = np.array([[
import numpy as np
from scipy import interpolate
mymin,mymax = 0,3
X = np.linspace(mymin,mymax,4)
Y = np.linspace(mymin,mymax,4)
x,y = np.meshgrid(X,Y)
test = np.array([[ 1.2514318 , 0, 1.25148472, 1.25151133],
[ 1.25087456, 0, 1.25092764, 1.25095435],
[ 1.25031581, 1.25034238, 1.25036907, 0],
[ 0, 1.24978222, 0, 1.24983587]])
f = interpolate.interp2d(x,y,test,kind='linear')
X_n = np.linspace(mymin,mymax,4)
Y_n = np.linspace(mymin,mymax,4)
test_n = f(X_n,Y_n)
print (test_n)
[[ 1.25143180e+00 2.77555756e-16 1.25148472e+00 1.25151133e+00]
[ 1.25087456e+00 2.49800181e-16 1.25092764e+00 1.25095435e+00]
[ 1.25031581e+00 1.25034238e+00 1.25036907e+00 1.38777878e-17]
[ 5.33635770e-17 1.24978222e+00 -1.11022302e-16 1.24983587e+00]]
你可以看到它是否正确工作,但是零点的位置,它变成了一个非常小的值,它与它周围的值不一致,我的插值方式是否有故障?
< P> Python不能知道你不想考虑零值。因此,您需要将其从二维阵列中删除:import numpy as np
from scipy import interpolate
# Dummy data
d = np.array([[1.2514318 , 0, 1.25148472, 1.25151133],
[1.25087456, 0, 1.25092764, 1.25095435],
[1.25031581, 1.25034238, 1.25036907, 0 ],
[0, 1.24978222, 0, 1.24983587]])
# Get the index of the non zero values
y,x = np.where(d!=0)
# Create your interpolation function on the non zero values
f = interpolate.interp2d(x,y,d[d!=0],kind='linear')
# Interpolate
X = np.arange(len(d))
print(f(X,X))
# OUTPUT:
#[[1.2514318 1.25145823 1.25148472 1.25151133]
# [1.25087456 1.25090106 1.25092764 1.25095435]
# [1.25031581 1.25034238 1.25036907 1.25039598]
# [0.94306808 1.24978222 1.39770265 1.24983587]]
请注意,此2D线性插值为空间域边界上的值提供了一些非常糟糕的结果。这是意料之中的,因为线性插值无法猜测给定空间域之外的值