了解Python Laplacian实现

时间:2016-03-11 17:33:49

标签: python

我正在看python的这一部分:

def laplacian(Z):
    Ztop = Z[0:-2,1:-1]
    Zleft = Z[1:-1,0:-2]
    Zbottom = Z[2:,1:-1]
    Zright = Z[1:-1,2:]
    Zcenter = Z[1:-1,1:-1]
    return (Ztop + Zleft + Zbottom + Zright - 4 * Zcenter) / dx**2

应该近似于2D上所有点的拉普拉斯。

来自here

所以说我有网格:

  0  1  2  3  4
0 a  b  c  d  e
1 f  g  h  i  j
2 k  l  m  n  o
3 p  q  r  s  t
4 u  v  w  x  y

教程内容如下:

  

我们可以使用网格计算此运算符的值   矢量化矩阵运算。因为边缘的副作用   矩阵,我们需要删除网格中的边框   计算

Ztop包括从开头到倒数第二个的行,以及从第二个到最后一个的列,所以它将是:

   1 2 3 4
0  b c d e
1  g h i j
2  l m n o
3  q r s t

是吗?

Zcenter包括从第二行到最后一行的行,以及从第二行到最后一行的列,所以:

   1 2 3 4 
1  g h i j 
2  l m n o 
3  q r s t 
4  v w x y 

我认为这是有道理的,因为当我们将Zcenter与Ztop相加时,原始网格中的每个元素都与上面的元素相加。

(虽然,我们不应该将-2作为Zcenter的结束索引,因为我们想要排除边界?

然后我看看Zbottom,它从第三行到结尾,从第二列到最后一列,所以:

   1 2 3 4 
2  
3  
4  

所以,即使没有填写这个,我可以看到这个网格是3x4而Zcenter和Ztop是4x4,那么总和怎么可能?

1 个答案:

答案 0 :(得分:1)

Ztop切掉底部两行以及第一列和最后一列

Zleft砍掉最右边的"两列以及第一行和最后一行

ZCenter切断顶行和底行以及"最左边"和#34;最右边"柱

Zbottom砍掉前两行以及第一列和最后一列

Zright切断"最左边"两列以及顶行和底行。

如果它们以5 X 5

运行,则全部生成3 X 3