首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取python中不均匀采样数据的laplacian

取python中不均匀采样数据的laplacian
EN

Stack Overflow用户
提问于 2013-08-12 21:31:26
回答 1查看 574关注 0票数 1

我有一堆不均匀采样(1-D)数据,以x和y值的形式,我想取laplacian值。是否有一种简单的方法可以在矮胖/枕木中做到这一点?

我正在考虑采取梯度梯度,但这难道不会引入伪影,即使是在均匀抽样的数据?例如,给定数据0,0,0,4,8,8,8和一维laplace算子1,-2,1,laplacian将是0,0,4,0,-4,0,0,但是使用梯度梯度将产生0,1,2,0,-2,-1,0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-12 23:38:00

计算均匀网格的[1, -2, 1]算子的一种方法是用前向差分格式计算第一个导数,用反向差分格式计算第二个导数,反之亦然,因为两者得到的结果是相同的。因此,对于不均匀网格,一个很好的选择是,两种方法都这样做,然后将结果平均化。

假设我们正在查看一个网格点,它位于前一个网格点之前的hb,以及下一个网格点后面的hf

代码语言:javascript
复制
--+----+----+---
 x-hb  x   x+hb 

如果我没有搞砸我的代数,您在x的拉普拉斯( Laplacian )计算的平均值将是:

代码语言:javascript
复制
(f(x+hf)*(1+hb/hf) + f(x)(2+hb/hf+hf/hb) + f(x-hb)(1+hf/hb)) / (2*hf*hb)

您可以在一维数组上计算这个值,执行:

代码语言:javascript
复制
def laplacian(x, y):
    x = np.asarray(x)
    y = np.asarray(y)
    hb = x[1:-1] - x[:-2]
    hf = x[2:] - x[1:-1]
    y_hb = y[:-2]
    y_hf = y[2:]
    hb_hf = hb / hf
    hf_hb = hf / hb
    return (y_hf*(1+hb_hf) - y[1:-1]*(2+hb_hf+hf_hb) +
            y_hb*(1+hf_hb)) / 2 / hb / hf

>>> laplacian(range(7), [0,0,0,4,8,8,8])
array([ 0.,  4.,  0., -4.,  0.])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18197008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档