擅长:python、mysql、java
<p>使用稀疏矩阵和数组,我可以将速度提高10倍。在</p>
<p><code>
Lx = np.empty((1, nspins), dtype='object')
Ly = np.empty((1, nspins), dtype='object')
Lz = np.empty((1, nspins), dtype='object')</code></p>
<p>在生成这些数组时,这些数组由单独的Lx数组(以前是稀疏矩阵)填充。使用数组结构可以使转置和笛卡尔积按需要执行:</p>
<p><code>
Lcol = np.vstack((Lx, Ly, Lz)).real
Lrow = Lcol.T # As opposed to sparse version of code, this works!
Lproduct = np.dot(Lrow, Lcol)</code></p>
<p>单个Lx[n]矩阵仍然是“捆绑”的,因此乘积是nxn矩阵。这意味着n x n J数组与Lproduct进行就地乘法运算:</p>
<p><code>
scalars = np.multiply(J, Lproduct)</code></p>
<p>然后将每个矩阵元素加到最终的哈密顿矩阵上:</p>
<p><code>for n in range(nspins):
for m in range(nspins):
M += scalars[n, k].real</code></p>