精髓是这一段
核心代码段如下:
@jit(nopython=True)
def solve_Heff(nk, V):
L, nk = V.shape
def Mterm2(q):
M2 = np.zeros((nk, nk), dtype=np.complex128)
Ap = np.power(np.absolute(V),2).sum(axis=1).copy() # 预处理一个常数项
for i in range(nk):
M2[i,i] += np.sum(Ap*np.power(np.absolute(V[:,(i - q + nk) % nk]), 2))
return M2 / nk
def Mterm3(q):
M3 = np.zeros((nk, nk), dtype=np.complex128)
for i in range(nk):
for j in range(nk):
M3[i, j] += np.sum(np.conj(V[:, (i - q + nk) % nk]) * V[:, i] * V[:,(j - q + nk) % nk] * np.conj(V[:,j]))
return M3 / nk
Ek = np.zeros((nk, nk))
for i in range(nk):
Heff = Mterm2(i) - Mterm3(i)
E, _ = LA.eigh(Heff)
Ek[:,i] = E
return Ek
其中用Numba优化时,需要查阅文档,看是否支持对应numpy操作,如果不支持,需要改位支持的形式。
最后
以上就是高大书本最近收集整理的关于投影严格对角化经典Python代码(Numpy向量化,Numba优化)的全部内容,更多相关投影严格对角化经典Python代码(Numpy向量化内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复