我正在寻找一种插补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')
我反而想找到一种方法,考虑到以下事实:右侧数据的信号强度超出了位于插值边缘的边界,信号强度急剧下降,这使得插值中心区域的值较低区。