例如,我有一个 20 x 20 矩阵。在矩阵中,背景值约为 1,信号值约为 3.5。我包含一个图像只是为了表示矩阵数据:

我想通过表面拟合来拟合表面的每个点(x 和 y)。我这样做的方法是创建一个权重矩阵,对于任何小于截止值(例如 1.1)的值,其权重为 1,而任何更大的值的权重为零。我使用以下代码创建权重矩阵:
def Weight_Values_Excluded(data,cutoff_val=1.1):
data_mat=np.copy(data)
weight_mat=np.zeros(data_mat.shape)
mask=(data_mat<=cutoff_val)
weight_mat[mask]=1
return weight_mat
然后我使用以下代码使用 6 阶多项式进行加权曲面拟合:
def poly_fit(data_mat,weighted_mat,order=6):
new_data=np.copy(data_mat)
xarray=np.arange(new_data.shape[1])
yarray=np.arange(new_data.shape[0])
X,Y=np.meshgrid(xarray,yarray)
surface=np.zeros(data_mat.shape)
for i in range(new_data.shape[0]):
polcoef=np.polynomial.polynomial.polyfit(xarray,new_data[i,:],order,w=weighted_mat[i,:])
surface[i,:]=np.polynomial.polynomial.polyval(xarray,polcoef)
return X,Y,surface
结果异常诡异。尽管我在矩阵中的最大值约为 3.5,但我创建的表面在边缘处发散到 900 左右。此处包括拟合表面的图像:
有谁可以告诉我的代码有什么问题?或者有人建议如何更好地进行加权表面贴合?
先感谢您!

