【发布时间】:2019-08-14 12:17:31
【问题描述】:
例如,我有一个 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 左右。此处包含拟合表面的图像:
有人能说出我的代码有什么问题吗?或者有人建议如何更好地进行加权表面拟合?
提前谢谢你!
【问题讨论】:
-
行为不是很明显吗?您正在拟合一系列 6 次多项式,数据中的每一行都有一个。您将信号的值加权为零。边缘权重为零的 6 次多项式(信号主要在哪里)看起来像这样。也许重新考虑你是如何加权的——信号不应该是 1.0 而背景是 0.0 吗?
-
我想适应背景表面而不是信号。我想尽可能地纠正来自背景的信号,所以我创建了一个理论表面来减少信号的每个点。但是,我可以创建小于 1 的边权重
标签: python python-3.x numpy scipy