我正在寻找一种方法来插值2d数组的一部分,很可能是用幂律的方法,不过也许知识更丰富的用户有其他更适合数据的建议。事实上,我甚至不知道如何实现幂律方法,但我(糟糕的)直觉是它可能会起作用。在
我有一个数组,它有一个屏蔽数据的大致圆形区域,类似于所提供的示例。我想用周围的数据对这个区域进行插值,得到一个空白区域的估计值。然而,复杂的是,在一个边缘(这里是右侧)有一个附加的组成部分,我知道它有相当尖锐的边界,很可能符合幂律。到目前为止,我已经尝试过线性和双三次插值方法,但是这些方法失败了,因为它们高估了右侧过量区域的贡献。在
annulus= np.array([[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 16.0, 17.0, 18.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 15.0, 15.0, 16.0, 16.0, 17.0, 18.0, 19.0, 19.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 15.0, 15.0, 15.0, 16.0, 17.0, 17.0, 18.0, 19.0, 20.0, 21.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 15.0, 15.0, 16.0, 16.0, 0.0, 0.0, 0.0, 20.0, 21.0, 22.0, 23.0, 0.0, 0.0],
[14.0, 14.0, 15.0, 15.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 22.0, 23.0, 25.0, 26.0, 0.0],
[14.0, 14.0, 15.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 24.0, 26.0, 28.0, 30.0],
[13.0, 14.0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 26.0, 28.0, 30.0, 33.0],
[13.0, 14.0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.0, 28.0, 30.0, 33.0, 0.0],
[13.0, 13.0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 24.0, 27.0, 30.0, 33.0, 0.0, 0.0],
[13.0, 13.0, 14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 26.0, 28.0, 32.0, 35.0, 0.0, 0.0],
[12.0, 13.0, 14.0, 15.0, 0.0, 0.0, 0.0, 0.0, 24.0, 27.0, 30.0, 34.0, 0.0, 0.0, 0.0],
[0.0, 13.0, 14.0, 15.0, 16.0, 0.0, 0.0, 22.0, 24.0, 27.0, 31.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 15.0, 16.0, 18.0, 19.0, 22.0, 25.0, 28.0, 32.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 14.0, 16.0, 18.0, 20.0, 22.0, 25.0, 29.0, 33.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 14.0, 16.0, 18.0, 20.0, 22.0, 26.0, 29.0, 34.0, 0.0, 0.0, 0.0, 0.0]])
#change 0 to nan
annulus[annulus==0]='nan'
x=np.arange(0,annulus.shape[1])
y=np.arange(0,annulus.shape[0])
#mask
annulus=np.ma.masked_invalid(annulus)
xx,yy=np.meshgrid(x,y)
x1=xx[~annulus.mask]
y1=yy[~annulus.mask]
newarr=annulus[~annulus.mask]
#for method below, "linear" instead of "cubic" applies linear interpolation.
result=interpolate.griddata((x1,y1),newarr.ravel(),
(xx,yy),
method='cubic')
相反,我希望找到一种在插值中心区域保留较低值的方法,考虑到右侧数据在插值区域边缘的边界以外的信号强度急剧下降。在
目前没有回答
相关问题 更多 >
编程相关推荐