python - 用于在 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')
相反,我想找到一种在插值中心区域留下较低值的方法,考虑到右侧数据在其边界之外的信号强度急剧下降这一事实,该边界位于插值区域的边缘。
解决方案
推荐阅读
- sql - SQL在where子句中重复代码,如何将整个where插入变量
- angular - 如何在 Angular 10 中正确设置 MatSort
- json - Json 到对象打字稿
- node.js - 猫鼬只连接到本地主机
- android - 无法在 React Native Android 中更改状态栏的颜色
- xml - 根据 XSLT 1.0 中的条件递增计数器
- javascript - 如何在 JavaScript 中将字符串转换为 var 对象
- javascript - 在一组子组件中实现 useContext
- android - IllegalStateException onSaveInstanceState 显示 DialogFragment 后无法执行此操作
- r - 当我有 >1000 列时,是否有更简单的方法来重新排序 R 中的列?