算法设计与智能计算 || 专题八: 拉普拉斯算子与图拉普拉斯

news2024/11/19 5:16:40

拉普拉斯算子与图拉普拉斯

文章目录

  • 拉普拉斯算子与图拉普拉斯
    • 1. 拉普拉斯基本概念与计算
      • 1.1 哈密尔顿算子
      • 1.2 梯度(gradient)
      • 1.3 散度(divergence)
      • 1.4 拉普拉斯算子
    • 2. 图像或图上的拉普拉斯算子
      • 2.1 离散网格上的拉普拉斯算子
      • 2.2 图(graph)上的拉普拉斯算子
        • 2.2.1 图的梯度(考虑边的方向和权重)
        • 2.2.2 图上的散度
        • 2.2.3 拉普拉斯矩阵
      • 2.3 无向图上的拉普拉斯算子
      • 2.3 图拉普拉斯矩阵的性质

1. 拉普拉斯基本概念与计算

拉普拉斯是函数梯度散度, 这个概念里面涉及到另外两个概念, 一个是梯度, 一个是散度, 首先需要回归一下这两个概念.

1.1 哈密尔顿算子

要分析多元函数 f ( x , y , z ) f(x, y, z) f(x,y,z) 的性态, 偏导数是一个重要的工具, 即从不同的角度(笛卡尔坐标系的方向)来观察其增减性, 这就用到了哈密尔顿算子, 定义如下

∇ = ∂ ∂ x i ⃗ + ∂ ∂ y j ⃗ + ∂ ∂ z k ⃗ \nabla = \frac{\partial}{\partial x} \vec{i} + \frac{\partial}{\partial y} \vec{j} + \frac{\partial}{\partial z} \vec{k} =xi +yj +zk

∇ = ( ∂ ∂ x , ∂ ∂ y , ∂ ∂ z ) \nabla = (\frac{\partial}{\partial x} ,\frac{\partial}{\partial y} ,\frac{\partial}{\partial z} ) =(x,y,z)

其中, i ⃗ \vec{i} i , j ⃗ \vec{j} j , k ⃗ \vec{k} k 分别表示 x y z xyz xyz 方向上的单位矢量.

1.2 梯度(gradient)

梯度是哈密尔顿算子直接作用于函数 f f f 的结果( f f f 可以是标量也可以是向量).

grad f = ∇ f = ∂ f ∂ x i ⃗ + ∂ f ∂ y j ⃗ + ∂ f ∂ z k ⃗ = ( ∂ f ∂ x , ∂ f ∂ y , ∂ f ∂ z ) \text{grad} f = \nabla f =\frac{\partial f}{\partial x} \vec{i} + \frac{\partial f}{\partial y} \vec{j} + \frac{\partial f}{\partial z} \vec{k} = (\frac{\partial f}{\partial x} ,\frac{\partial f}{\partial y} ,\frac{\partial f}{\partial z} ) gradf=f=xfi +yfj +zfk =(xf,yf,zf)
标量场的梯度是向量场, 标量场中某一点的梯度只想标量场增长最快的地方, 梯度的长度是最大变化率.

1.3 散度(divergence)

散度针对的是对象是矢量场, 是描述从周围汇合到某一处或者从某一处散开的程度, 它可用于表征空间个点矢量场发散的强弱程度, 在物理上, 散度的意义是场的有源性.

对于 v ⃗ ( x , y , z ) = P ( x , y , z ) ⋅ i ⃗ + Q ( x , y , z ) ⋅ i ⃗ + R ( x , y , z ) ⋅ i ⃗ \vec{v}(x,y,z)=P(x,y,z)\cdot\vec{i}+Q(x,y,z)\cdot\vec{i}+R(x,y,z)\cdot\vec{i} v (x,y,z)=P(x,y,z)i +Q(x,y,z)i +R(x,y,z)i , 散度定义为

div    v ⃗ = ∇ ⋅ v ⃗ = ( ∂ ∂ x , ∂ ∂ y , ∂ ∂ z ) ⋅ ( P ( x , y , z ) , Q ( x , y , z ) , R ( x , y , z ) ) = ∂ P ( x , y , z ) ∂ x + ∂ Q ( x , y , z ) ∂ y + ∂ R ( x , y , z ) ∂ z \text{div}\; \vec{v}=\nabla\cdot \vec{v}=(\frac{\partial}{\partial x} ,\frac{\partial}{\partial y} ,\frac{\partial}{\partial z} )\cdot\Big(P(x,y,z),Q(x,y,z),R(x,y,z)\Big)\\ =\frac{\partial P(x,y,z)}{\partial x} +\frac{\partial Q(x,y,z)}{\partial y} +\frac{\partial R(x,y,z)}{\partial z} divv =v =(x,y,z)(P(x,y,z),Q(x,y,z),R(x,y,z))=xP(x,y,z)+yQ(x,y,z)+zR(x,y,z)

  • div    v ⃗ > 0 \text{div}\; \vec{v}>0 divv >0, 该点有发散通量的正源(发散源)
  • div    v ⃗ < 0 \text{div}\; \vec{v}<0 divv <0, 该点有吸收通量的负源(汇聚源)
  • div    v ⃗ > 0 \text{div}\; \vec{v}>0 divv >0, 该点无源

在这里插入图片描述

1.4 拉普拉斯算子

在通常我们遇到的数据集或者函数都是标量而非矢量, 函数或者数据的每一个样本点可通过求梯度获得矢量场, 然后可通过求解矢量场的散度获得有源性, 称为拉普拉斯算子. 拉普拉斯算子本质上是梯度的散度.

对于多元函数 f ( x , y , z ) f(x,y,z) f(x,y,z), 其拉普拉斯运算可表示为
Δ f = d i v ⋅ g r a d f = ∇ ⋅ ∇ f = ∇ 2 f = ( ∂ ∂ x , ∂ ∂ y , ∂ ∂ z ) ⋅ ( ∂ f ∂ x , ∂ f ∂ y , ∂ f ∂ z ) = ∂ 2 f ∂ x 2 + ∂ 2 f ∂ y 2 + ∂ 2 f ∂ z 2 \Delta f = div \cdot grad f = \nabla\cdot \nabla f = \nabla^2 f\\ =(\frac{\partial}{\partial x} ,\frac{\partial}{\partial y} ,\frac{\partial}{\partial z} )\cdot(\frac{\partial f}{\partial x} ,\frac{\partial f}{\partial y} ,\frac{\partial f}{\partial z} )\\ =\frac{\partial ^2f}{\partial x^2} +\frac{\partial^2 f}{\partial y^2} +\frac{\partial^2 f}{\partial z^2} Δf=divgradf=f=2f=(x,y,z)(xf,yf,zf)=x22f+y22f+z22f

在这里插入图片描述

2. 图像或图上的拉普拉斯算子

从拉普拉斯算子的形式上看是梯度的散度, 或者是二阶偏导数的和. 在应用过程中由于涉及到求二阶偏导数, 这就是的其很容易应用于笛卡尔坐标系中的图像数据, 而对于图结构数据的应用则需要一定的推广.

2.1 离散网格上的拉普拉斯算子

图像虽然是非结构化数据, 但是其形式非常特殊, 像素点可看作函数值, 而且有规整的离散网格形式, 图像的行、列、通道符合笛卡尔直角坐标系, 满足两两互相垂直, 很容易通过函数定义进行计算.
在这里插入图片描述

对于规整的图像数据而言, 拉普拉斯本质上可看作是对每个像素至的加权求和, 即

Δ f ( x , y ) = ( 1 , 1 , 1 , 1 , − 4 ) ( f ( x − 1 , y ) , f ( x + 1 , y ) , f ( x , y − 1 ) , f ( x , y + 1 ) ) \Delta f(x,y)=(1,1,1,1,-4)\Big(f(x-1,y), f(x+1,y), f(x,y-1), f(x,y+1)\Big) Δf(x,y)=(1,1,1,1,4)(f(x1,y),f(x+1,y),f(x,y1),f(x,y+1))
如图所示

在这里插入图片描述

通过构造卷积核的方式利用拉普拉斯值的大小和正负很容易应用于点检测; 同样, 也可以利用拉普拉斯算子构造卷积核进行线检测.

2.2 图(graph)上的拉普拉斯算子

拉普拉斯算子处理的对象一般是在欧氏空间中的,而图上的拉普拉斯不能直接套用图像上的拉普拉斯算子, 而需要将其拓展到了非欧氏空间上,因为其处理的数据不在是规则区域,而是具有一定拓扑结构的图。

规则结构的图像上的拉普拉斯算子的操作主要是对中心点的周围点进行运算,如果类比到图上的话就是对应顶点的邻接点。同样我们也需要定义一个关于顶点的函数来与之前的多元函数对应,并且还要相应的定义偏导与散度。

由于graph不像不像活着连续函数有像素值或者函数值, 所以在求梯度时不容易, 因此, 我们需要给顶点定义函数. 另外, graph 中有边和权重组成, 记为 G ( W , E , V ) \mathcal{G}(W,E,V) G(W,E,V). 下面通过一个图信号 f = ( 3 , 5 , − 2 , 1 , − 5 ) ⊤ f = (3,5,-2,1,-5)^\top f=(3,5,2,1,5) 为例来展示如何定义图拉普拉斯

在这里插入图片描述

2.2.1 图的梯度(考虑边的方向和权重)

∇ f ( e A B ) = 5 × ( 5 − 3 ) = 10 \nabla f(e_{AB})=5\times(5-3)=10 f(eAB)=5×(53)=10
∇ f ( e A C ) = 3 × ( − 2 − 3 ) = − 15 \nabla f(e_{AC})=3\times(-2-3)=-15 f(eAC)=3×(23)=15
∇ f ( e B D ) = 7 × ( 1 − 5 ) = − 28 \nabla f(e_{BD})=7\times(1-5)=-28 f(eBD)=7×(15)=28
∇ f ( e B E ) = 2 × ( − 5 − 5 ) = − 20 \nabla f(e_{BE})=2\times(-5-5)=-20 f(eBE)=2×(55)=20
∇ f ( e C D ) = 1 × ( 1 − ( − 2 ) ) = 3 \nabla f(e_{CD})=1\times(1-(-2))=3 f(eCD)=1×(1(2))=3
∇ f ( e D E ) = 4 × ( − 5 − 1 ) = − 24 \nabla f(e_{DE})=4\times(-5-1)=-24 f(eDE)=4×(51)=24

所以, 可知每个点的梯度为
∇ f ( A ) = ( 10 , − 15 ) ⊤ \nabla f(A)=(10,-15)^\top f(A)=(10,15)
∇ f ( B ) = ( 10 , − 28 , − 20 ) ⊤ \nabla f(B) = (10,-28,-20)^\top f(B)=(10,28,20)
∇ f ( C ) = ( − 15 , 3 ) ⊤ \nabla f(C)=(-15,3)^\top f(C)=(15,3)
∇ f ( D ) = ( − 28 , 3 , − 24 ) ⊤ \nabla f(D)=(-28,3,-24)^\top f(D)=(28,3,24)
∇ f ( E ) = ( − 20 , − 24 ) ⊤ \nabla f(E)=(-20,-24)^\top f(E)=(20,24)

函数 f \boldsymbol{f} f 的梯度为

g r a d f = [ 10 − 15 − 28 − 20 3 − 24 ] grad \boldsymbol{f}=\left[ \begin{array}{c} 10\\ -15\\ -28\\ -20\\ 3\\ -24 \end{array} \right ] gradf= 10152820324
用矩阵进行表示
g r a d f = ∇ f = [ − 5 5 0 0 0 − 3 0 3 0 0 0 − 7 0 7 0 0 − 2 0 0 2 0 0 − 1 1 0 0 0 0 − 4 4 ] ⋅ [ 3 5 − 2 1 − 5 ] = [ 10 − 15 − 28 − 20 3 − 24 ] grad \boldsymbol{f}=\nabla\boldsymbol{f}=\left[ \begin{array}{c} -5&5&0&0&0\\ -3&0&3&0&0\\ 0&-7&0&7&0\\ 0&-2&0&0&2\\ 0&0&-1&1&0\\ 0&0&0&-4&4 \end{array} \right ]\cdot \left[ \begin{array}{c} 3\\ 5\\ -2\\ 1\\ -5 \end{array} \right ] =\left[ \begin{array}{c} 10\\ -15\\ -28\\ -20\\ 3\\ -24 \end{array} \right ] gradf=f= 530000507200030010007014000204 35215 = 10152820324

∇ f = [ 5 3 7 2 1 4 ] ⋅ [ − 1 1 0 0 0 − 1 0 1 0 0 0 − 1 0 1 0 0 − 1 0 0 1 0 0 − 1 1 0 0 0 0 − 1 1 ] ⋅ [ 3 5 − 2 1 − 5 ] = [ 10 − 15 − 28 − 20 3 − 24 ] \nabla\boldsymbol{f}=\left[ \begin{array}{c} 5&&&&&\\ &3&&&&\\ &&7&&&\\ &&&2&&\\ &&&&1&\\ &&&&&4 \end{array} \right ]\cdot \left[ \begin{array}{c} -1&1&0&0&0\\ -1&0&1&0&0\\ 0&-1&0&1&0\\ 0&-1&0&0&1\\ 0&0&-1&1&0\\ 0&0&0&-1&1 \end{array} \right ]\cdot \left[ \begin{array}{c} 3\\ 5\\ -2\\ 1\\ -5 \end{array} \right ] =\left[ \begin{array}{c} 10\\ -15\\ -28\\ -20\\ 3\\ -24 \end{array} \right ] f= 537214 110000101100010010001011000101 35215 = 10152820324

矩阵乘法的解释如图所示

在这里插入图片描述

2.2.2 图上的散度

graph 中的散度不同于图像中散度的求法, 因为图像或者函数是在直角坐标系中进行运算, 而 graph 中的方向不是互相垂直的, 因此, 我们认为每条边都互相垂直, 可通过边的方向的正负求偏导数

拉普拉斯(梯度的散度)
Δ f ( A ) = ∇ ⋅ ∇ f ( A ) = ( − 1 , − 1 ) ( 10 , − 15 ) ⊤ = − 5 \Delta f(A)=\nabla\cdot\nabla f(A)=(-1,-1)(10,-15)^\top=-5 Δf(A)=f(A)=(1,1)(10,15)=5
Δ f ( B ) = ∇ ⋅ ∇ f ( B ) = ( 1 , − 1 , − 1 ) ( 10 , − 28 , − 20 ) ⊤ = 58 \Delta f(B)=\nabla\cdot\nabla f(B)=(1,-1, -1)(10,-28,-20)^\top=58 Δf(B)=f(B)=(1,1,1)(10,28,20)=58
Δ f ( C ) = ∇ ⋅ ∇ f ( C ) = ( 1 , − 1 ) ( − 15 , 3 ) ⊤ = − 18 \Delta f(C)=\nabla\cdot\nabla f(C)=(1,-1)(-15,3)^\top=-18 Δf(C)=f(C)=(1,1)(15,3)=18
Δ f ( D ) = ∇ ⋅ ∇ f ( A ) = ( 1 , 1 , − 1 ) ( − 28 , 3 , − 24 ) ⊤ = − 1 \Delta f(D)=\nabla\cdot\nabla f(A)=(1,1,-1)(-28,3,-24)^\top=-1 Δf(D)=f(A)=(1,1,1)(28,3,24)=1
Δ f ( E ) = ∇ ⋅ ∇ f ( A ) = ( 1 , 1 ) ( − 20 , − 24 ) ⊤ = − 44 \Delta f(E)=\nabla\cdot\nabla f(A)=(1,1)(-20,-24)^\top=-44 Δf(E)=f(A)=(1,1)(20,24)=44

图信号 f \boldsymbol{f} f 的梯度的散度为 ∇ 2 f = [ − 5 , 58 , − 18 , − 1 , − 44 ] ⊤ \nabla^2\boldsymbol{f}=[-5,58,-18,-1,-44]^\top 2f=[5,58,18,1,44]

矩阵表示为
∇ 2 f = [ − 1 − 1 0 0 0 0 1 0 − 1 − 1 0 0 0 1 0 0 − 1 0 0 0 1 0 1 − 1 0 0 0 1 0 1 ] ⋅ [ 10 − 15 − 28 − 20 3 − 24 ] = [ − 5 58 − 18 − 1 − 44 ] \nabla^2 \boldsymbol{f}=\left[ \begin{array}{c} -1&-1&0&0&0&0\\ 1&0&-1&-1&0&0\\ 0&1&0&0&-1&0\\ 0&0&1&0&1&-1\\ 0&0&0&1&0&1 \end{array} \right ]\cdot \left[ \begin{array}{c} 10\\ -15\\ -28\\ -20\\ 3\\ -24 \end{array} \right ] =\left[ \begin{array}{c} -5\\ 58\\ -18\\ -1\\ -44 \end{array} \right ] 2f= 110001010001010010010011000011 10152820324 = 55818144

综上可知

∇ 2 f = [ − 1 − 1 0 0 0 0 1 0 − 1 − 1 0 0 0 1 0 0 − 1 0 0 0 1 0 1 − 1 0 0 0 1 0 1 ] ⋅ [ 5 3 7 2 1 4 ] ⋅ [ − 1 1 0 0 0 − 1 0 1 0 0 0 − 1 0 1 0 0 − 1 0 0 1 0 0 − 1 1 0 0 0 0 − 1 1 ] ⋅ [ 3 5 − 2 1 − 5 ] = [ − 5 58 − 18 − 1 − 44 ] \nabla^2 \boldsymbol{f}=\left[ \begin{array}{c} -1&-1&0&0&0&0\\ 1&0&-1&-1&0&0\\ 0&1&0&0&-1&0\\ 0&0&1&0&1&-1\\ 0&0&0&1&0&1 \end{array} \right ]\cdot \left[ \begin{array}{c} 5&&&&&\\ &3&&&&\\ &&7&&&\\ &&&2&&\\ &&&&1&\\ &&&&&4 \end{array} \right ]\cdot \left[ \begin{array}{c} -1&1&0&0&0\\ -1&0&1&0&0\\ 0&-1&0&1&0\\ 0&-1&0&0&1\\ 0&0&-1&1&0\\ 0&0&0&-1&1 \end{array} \right ]\cdot \left[ \begin{array}{c} 3\\ 5\\ -2\\ 1\\ -5 \end{array} \right ] =\left[ \begin{array}{c} -5\\ 58\\ -18\\ -1\\ -44 \end{array} \right ] 2f= 110001010001010010010011000011 537214 110000101100010010001011000101 35215 = 55818144

∇ 2 f = [ − 5 − 3 0 0 0 0 5 0 − 7 − 2 0 0 0 3 0 0 − 1 0 0 0 7 0 1 − 2 0 0 0 2 0 2 ] ⋅ [ − 5 5 0 0 0 − 3 0 3 0 0 0 − 7 0 7 0 0 − 2 0 0 2 0 0 − 1 1 0 0 0 0 − 2 2 ] ⋅ [ 3 5 − 2 1 − 5 ] = [ − 5 58 − 18 − 1 − 44 ] \nabla^2 \boldsymbol{f}=\left[ \begin{array}{c} -\sqrt{5}&-\sqrt{3}&0&0&0&0\\ \sqrt{5}&0&-\sqrt{7}&-\sqrt{2}&0&0\\ 0&\sqrt{3}&0&0&-1&0\\ 0&0&\sqrt{7}&0&1&-2\\ 0&0&0&\sqrt{2}&0&2 \end{array} \right ]\cdot \left[ \begin{array}{c} -\sqrt{5}&\sqrt{5}&0&0&0\\ -\sqrt{3}&0&\sqrt{3}&0&0\\ 0&-\sqrt{7}&0&\sqrt{7}&0\\ 0&-\sqrt{2}&0&0&\sqrt{2}\\ 0&0&-1&1&0\\ 0&0&0&-2&2 \end{array} \right ]\cdot \left[ \begin{array}{c} 3\\ 5\\ -2\\ 1\\ -5 \end{array} \right ] =\left[ \begin{array}{c} -5\\ 58\\ -18\\ -1\\ -44 \end{array} \right ] 2f= 5 5 0003 03 0007 07 002 002 0011000022 5 3 00005 07 2 0003 0010007 0120002 02 35215 = 55818144

这种矩阵表达形式也可以表示为

∇ 2 f = [ 8 − 5 − 3 0 0 − 5 14 0 − 7 − 2 − 3 0 4 − 1 0 0 − 7 − 1 12 − 4 0 − 2 0 − 4 6 ] ⋅ [ 3 5 − 2 1 − 5 ] = [ − 5 58 − 18 − 1 − 44 ] \nabla^2 \boldsymbol{f}=\left[ \begin{array}{c} 8&-5&-3&0&0\\ -5&14&0&-7&-2\\ -3&0&4&-1&0\\ 0&-7&-1&12&-4\\ 0&-2&0&-4&6 \end{array} \right ]\cdot \left[ \begin{array}{c} 3\\ 5\\ -2\\ 1\\ -5 \end{array} \right ] =\left[ \begin{array}{c} -5\\ 58\\ -18\\ -1\\ -44 \end{array} \right ] 2f= 853005140723041007112402046 35215 = 55818144

或可表示为

∇ 2 f = ( [ 8 14 4 12 6 ] − [ 0 5 3 0 0 5 0 0 7 2 3 0 0 1 0 0 7 1 0 4 0 2 0 4 0 ] ) ⋅ [ 3 5 − 2 1 − 5 ] = [ − 5 58 − 18 − 1 − 44 ] \nabla^2 \boldsymbol{f}=\Bigg(\left[ \begin{array}{c} 8&&&&\\ &14&&&\\ &&4&&\\ &&&12&\\ &&&&6 \end{array} \right ]-\left[ \begin{array}{c} 0&5&3&0&0\\ 5&0&0&7&2\\ 3&0&0&1&0\\ 0&7&1&0&4\\ 0&2&0&4&0 \end{array} \right ]\Bigg)\cdot \left[ \begin{array}{c} 3\\ 5\\ -2\\ 1\\ -5 \end{array} \right ] =\left[ \begin{array}{c} -5\\ 58\\ -18\\ -1\\ -44 \end{array} \right ] 2f=( 8144126 0530050072300100710402040 ) 35215 = 55818144

2.2.3 拉普拉斯矩阵

如2.2.2节的例子所示, 拉普拉斯矩阵是梯度的散度形式的矩阵表达. 把有向图看作无向图可表示为一个邻接矩阵(对称矩阵)
W = [ 0 5 3 0 0 5 0 0 7 2 3 0 0 1 0 0 7 1 0 4 0 2 0 4 0 ] W = \left[ \begin{array}{c} 0&5&3&0&0\\ 5&0&0&7&2\\ 3&0&0&1&0\\ 0&7&1&0&4\\ 0&2&0&4&0 \end{array} \right ] W= 0530050072300100710402040

度矩阵为对角阵
D = [ 8 14 4 12 6 ] D = \left[ \begin{array}{c} 8&&&&\\ &14&&&\\ &&4&&\\ &&&12&\\ &&&&6 \end{array} \right ] D= 8144126

则拉普拉斯矩阵可表示为

L = D − W L = D-W L=DW

若定义矩阵 M M M

M i j = { − w i j i < j 0 i = j w i j i > j M_{ij} = \left\{\begin{array}{c} -\sqrt{w_{ij}}&i<j\\ 0&i=j\\ \sqrt{w_{ij}}&i>j \end{array} \right. Mij= wij 0wij i<ji=ji>j
则拉普拉斯矩阵也可以表示为

L = M ⊤ M L=M^\top M L=MM

2.3 无向图上的拉普拉斯算子

首先我们需要借助图像函数的思想, 为每个顶点赋予一个通用的函数 f f f. 第 i i i 个点的梯度可表示为 { w i j ( f i − f j ) } j = 1 N i \Big\{w_{ij}(f_i-f_j)\Big\}_{j=1}^{N_i} {wij(fifj)}j=1Ni, 对梯度分量在求梯度和的时候, 由于图的特殊性, 不考虑坐标轴而是有向图只考虑出发为-1, 进入为 1; 无向图则不考虑出发和进入, 全部为 1, 则无向图的单个顶点的拉普拉斯(本质上是在度量差异性)可表示为

L a p ( f i ) = Σ j ∈ N i ⏟ d i v    o f    u n d e r e c t i o n    g r a p h w i j ( f i − f j ) ⏟ g r a d = Σ j ∈ N i w i j f i − Σ j ∈ N i w i j f j = ( w i 1 f i + w i 2 f i + ⋯ + w i n f i ) − ( w i 1 f 1 + w i 2 f 2 + ⋯ + w i N i f N i ) = ( w i 1 + w i 2 + ⋯ + w i n ) f i − ( w i 1 f 1 + w i 2 f 2 + ⋯ + w i N i f N i ) = d i f i − w i , : f \begin{array}{l} Lap( f_i)=\underbrace{\Sigma_{j\in N_i}}_{div\;of\; underection\;graph}\underbrace{w_{ij}(f_i-f_j)}_{grad}\\ =\Sigma_{j\in N_i}w_{ij}f_i-\Sigma_{j\in N_i}w_{ij}f_j\\ =(w_{i1}f_i+w_{i2}f_i+\cdots+w_{in}f_i)-(w_{i1}f_1+w_{i2}f_2+\cdots+w_{i{N_i}}f_{N_i})\\ =(w_{i1}+w_{i2}+\cdots+w_{in})f_i-(w_{i1}f_1+w_{i2}f_2+\cdots+w_{i{N_i}}f_{N_i})\\ =d_if_i-w_{i,:}\boldsymbol f \end{array} Lap(fi)=divofunderectiongraph ΣjNigrad wij(fifj)=ΣjNiwijfiΣjNiwijfj=(wi1fi+wi2fi++winfi)(wi1f1+wi2f2++wiNifNi)=(wi1+wi2++win)fi(wi1f1+wi2f2++wiNifNi)=difiwi,:f

对于图上的所有顶点的拉普拉斯可表示为
L a p ( f ) = [ L a p ( f 1 ) L a p ( f 2 ) ⋯ L a p ( f n ) ] = [ d 1 f 1 − w 1 , : f d 2 f 2 − w 2 , : f ⋯ d n f n − w n , : f ] = [ d 1 f 1 d 2 f 2 ⋯ d n f n ] − [ w 1 , : w 2 , : ⋯ w n , : ] f = ( d 1 d 2 ⋱ d n ) ( f 1 f 2 ⋮ f n ) − [ w 1 , : w 2 , : ⋯ w n , : ] f = D f − W f = ( D − W ) f = L f \begin{array}{l} Lap( \boldsymbol f)=\begin{bmatrix} Lap( f_1)\\ Lap( f_2)\\ \cdots\\ Lap( f_n) \end{bmatrix} =\begin{bmatrix} d_1f_1-w_{1,:}\boldsymbol f\\ d_2f_2-w_{2,:}\boldsymbol f\\ \cdots \\ d_nf_n-w_{n,:}\boldsymbol f \end{bmatrix} =\begin{bmatrix} d_1f_1 \\ d_2f_2 \\ \cdots \\ d_nf_n \end{bmatrix}- \begin{bmatrix} w_{1,:} \\ w_{2,:} \\ \cdots \\ w_{n,:} \end{bmatrix}\boldsymbol f\\ =\begin{pmatrix} d_1 & & & \\ & d_2 & & \\ & & \ddots & \\ & & &d_n \end{pmatrix}\begin{pmatrix} f_1\\ f_2\\ \vdots \\ f_n \end{pmatrix}- \begin{bmatrix} w_{1,:} \\ w_{2,:} \\ \cdots \\ w_{n,:} \end{bmatrix}\boldsymbol f\\ =D\boldsymbol f-W\boldsymbol f=(D-W)\boldsymbol{f}=L\boldsymbol{f} \end{array} Lap(f)= Lap(f1)Lap(f2)Lap(fn) = d1f1w1,:fd2f2w2,:fdnfnwn,:f = d1f1d2f2dnfn w1,:w2,:wn,: f= d1d2dn f1f2fn w1,:w2,:wn,: f=DfWf=(DW)f=Lf
矩阵 L = D − W L=D-W L=DW称为矩阵 W W W的拉普拉斯矩阵。

2.3 图拉普拉斯矩阵的性质

如果对拉普拉斯矩阵进行特征值分解, 特征方程为 L u = λ u L\boldsymbol{u}=\lambda \boldsymbol{u} Lu=λu. 由于图拉普拉斯矩阵的行和为 0 0 0, 则其最小的特征值为0, 特征向量为全 1 1 1 的列向量.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云时通助力耐消品行业经销商数字化管理,全面破除渠道管理难题

随着中国商业正在从“消费红利”经济向“数智创新”经济进化&#xff0c;耐用消费品零售发展思路从单节点成本和效率提升&#xff0c;向数字技术触发的全链路数智化转型。如何顺利从“传统分销模型”向“零售模式”转型成为企业关注重点问题。 耐消品作为典型的长链条交易&…

人生不能重来,于是有了电影

人生不能重来&#xff0c;于是有了电影&#x1f3ac;&#xff0c;2020年对于我来说是特殊的年份&#xff0c;由于疫情公司受到严重打击&#xff0c;我所属的行业与我背道而驰&#xff0c;就这样&#xff0c;我失业了&#xff0c;从没想过&#xff0c;会因为这个原因而离开一家自…

机器学习之朴素贝叶斯一

一、概述 朴素贝叶斯算法是典型的有监督学习算法&#xff0c;解决的是分类问题 贝叶斯算法是一种基于贝叶斯定理的分类算法&#xff0c;它的优点和缺点如下&#xff1a; 优点&#xff1a; 算法原理简单易懂&#xff0c;实现较为容易&#xff1b;可以利用先验知识对模型进行训…

2.0 Vue框架设计的核心要素

本章主要讲解&#xff0c;一个好的框架在构建的时候&#xff0c;需要考虑到的要素&#xff0c;包含报错信息反馈、警告信息反馈、减少打包体积、良好的输出、特性开关&#xff08;兼容&#xff09;等 1、提升用户开发体验 提升用户开发体验主要体现在用户使用框架进行开发时&…

3DES实验 思考与练习:

T1&#xff1a;关于3DES的分析 和 库函数的思考——完全领悟了&#xff01;&#xff01;&#xff01; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/des.h> /***********************************************…

java小记

public class Test {/*** 谓类的方法就是指类中用static 修饰的方法&#xff08;非static 为实例方法&#xff09;&#xff0c;比如main 方法&#xff0c;那么可以以main* 方法为例&#xff0c;可直接调用其他类方法&#xff0c;必须通过实例调用实例方法&#xff0c;this 关键…

原生OpenFeign相较于传统HTTP工具的优化和原理

文章目录 1.HTTP工具使用流程及问题1.1 使用OkHttp3流程示例1.2 存在的两大问题 2.OpenFeign的优化3.OpenFeign实现原理3.1 使用Feign构造动态代理对象3.2 Feign动态代理的实现原理 本篇介绍的是springcloud-openfeign的底层框架io.github.openfeign&#xff0c;重点不是框架如…

【Redis】Redis缓存雪崩、缓存穿透、缓存击穿(热key问题)

目录 一、缓存穿透 1、概念 2、解决办法 1.缓存空对象 2.布隆过滤 二、缓存雪崩 1、概念 2、解决办法 1.给key设置随机的过期时间TTL 2.业务添加多级缓存 3.利用集群提供服务可用性 4.缓存业务添加降级限流 三、缓存击穿 1、概念 2、解决办法 1.互斥锁 2.逻辑…

数据结构:第三章 栈、队列和数组

文章目录 一、栈1.1栈的概念1.1.1栈的定义1.1.2栈的基本操作1.1.3栈的常见考题1.1.4小结 1.2栈的顺序存储实现1.2.1顺序栈的定义1.2.2初始化操作1.2.3进栈操作1.2.4出栈操作1.2.5获取栈顶元素操作1.2.6共享栈1.2.7小结 1.3栈的链式存储实现1.3.1链栈的定义1.3.2小结 二、队列2.…

Optional的使用详解

工作中经常会调外部接口、或者查询表等&#xff0c;如果对返回结果不进行空指针判断的话就会导致空指针异常。针对这种情况经常会使用if进行判断: private boolean isNotNull(Object param) {if (param null) {return false;} else {return true;}}这样写其实功能上没有任何问…

上班摸鱼在群里吹牛B,逮到一个阿里10年老测试开发,聊过之后收益良多...

老话说的好&#xff0c;这人呐&#xff0c;一单在某个领域鲜有敌手了&#xff0c;就会闲得蛋疼。前几天我在上班摸鱼刷群的时候认识了一位阿里测试开发大佬&#xff0c;在华为工作了10年&#xff0c;因为本人天赋比较高&#xff0c;平时工作也兢兢业业&#xff0c;现在企业内有…

USB协议分析仪

1 ULPI PHY passive sniffing mode 概念: non driving, no pull-up, no pull-down Function Control.opMode 1; // non-Driving OTG Control.DpPulldown 0; // no pull-down OTG Control.DmPulldown 0; // no pull-down USB IO.ChargerPullupEnDP 0; // no pull-up USB IO.…

九、MyBatis动态SQL

文章目录 九、动态SQL9.1 if9.2 where9.3 trim9.4 choose、when、otherwise9.5 foreach9.6 SQL片段 本人其他相关文章链接 九、动态SQL 9.1 if 总结&#xff1a;根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中。 User getUserByParamsWithIf(User user…

缓存击穿,穿透,雪崩

一、缓存穿透 是用户访问的数据既不在缓存当中&#xff0c;也不在数据库中。 如果从数据库查询不到数据&#xff0c;则不写入缓存。这就导致每次请求都会到数据库进行查询&#xff0c;缓存也失去了意义。 当高并发或有人利用不存在的Key频繁攻击时&#xff0c;数据库的压力骤…

AI 工具合辑盘点(四)持续更新

AI 视频生成和编辑工具 当今&#xff0c;视频已经成为最受欢迎的媒介之一。我们喜欢观看视频&#xff0c;但是制作高质量的视频需要耗费大量时间和精力。 无论你是内容创作者、专业视频编辑师&#xff0c;还是完全的新手&#xff0c;按照传统方式制作视频需要掌握各种知识、技…

【Maxwell】MySQL数据监听

背景 我们都知道随着业务的发展,监听数据库的数据变更及时性是必须的,虽然我们可以在入库之前进行处理,但是有个问题就是事务的一致性不好掌控,而且很多业务都是微服务的,那么不在一个微服务中,可能有需要跨服务去调用,那么此时直接去监听mysql的binlog来实现数据的操作…

这一篇Databinding应该可以帮助迅速上手吧

Databinding使用篇&#xff08;迅速上手&#xff09; 使用前需要在模块级别的build.gradle里面的android闭包里添加&#xff1a; dataBinding{enabled true}接着在layout文件中按下Alt 回车&#xff0c; 将布局转换成data binding layout即可&#xff0c;此时编译就会生成对…

【JAVAEE】创建线程的方式及线程的常用方法

目录 1.创建线程的四种方式 1.1继承Thread类 1.2实现Runnable接口 1.3匿名内部类 1.4lambda表达式 2.多线程的优势-增加运行速度 3.Thread类及常用方法 3.1构造方法 3.2常见属性 演示后台线程 演示线程是否存活 3.3线程中断 3.4线程等待-join() 3.5获取当前线程 …

23年5月高项备考学习笔记——信息系统管理

管理&#xff1a;监督系统的设计和结构 系统&#xff1a;提供蓝图 系统管理&#xff1a; 规划和组织&#xff1a;业务战略、组织机制、信息系统 业务战略&#xff1a; 总成本领先战略 差异性战略 专注化战略 设计和实施&#xff1a;战略转成需求&#xff0c;便管理&#xff1b…

5月5号软件资讯更新合集.....

Visual Studio Code 1.78 发布 VS Code 1.78 已发布&#xff0c;此版本一些主要亮点包括&#xff1a; 辅助功能改进 - 更好的屏幕阅读器支持、新的音频提示。 新的颜色主题 - “Modern” 浅色和深色主题默认设置。 配置文件模板 - Python、Java、数据科学等的内置模板。 新…