我想附加在单独的列表中,例如:list1 for j=1,list 2 for j=2 等等,类似地 (total[j]= (sum(sum_list[j]/mcSteps-j)>
这是代码:
sum_list=[]
cor =[]
for j in range(10):
for i in range(mcSteps-j):
sum_list.append(Energy_list[i]*Energy_list[i+j])
total[j]=sum(sum_list[j])
deltat[j]=total[j]/(mcSteps-j)
cor[j].append(Divide*(deltat[j]-E1mean*E1mean))
print('cor[j]')
答案 0 :(得分:0)
我建议考虑使用 numpy
来做这样的事情(从它的样子来看)。您可以在更少的行中完成其中的许多操作 - 当您进行相当大的数值计算(大约 N=10_000
)时,与 Python 列表和循环相比,它保持了挂钟效率。
任何人,您所要求的解决方案似乎是......
from typing import List
def compute_delta_t(ls: List, steps: int, offset: int) -> float:
energies = [ls[step] * ls[step + offset] for step in range(steps)]
delta_t = sum(energies) / (steps - offset)
return delta_t
delta_ts = [
compute_delta_t(Energy_list, mcSteps, offset)
for offset in range(10)
]
corrs = [Divide * (delta_t - (E1mean ** 2)) for delta_t in delta_ts]
上述方法应该是相当高效的 Python 代码(尽管变得站不住脚和不可读)。
numpy
,一种在 Python 中进行 [矩阵] 数学(以及许多其他事情)的替代方法。
import numpy as np
def compute_delta_t(ls: np.ndarray, mcSteps: int, offset: int) -> np.ndarray:
energies = ls[:(mcSteps - offset)] * ls[offset:(mcSteps + offset)]
delta_t = energies.sum() / (mcSteps - offset)
return delta_t
delta_ts = np.asarray([
compute_delta_t(Energy_list, mcSteps, offset)
for offset in range(10)
])
corrs = Divide * (delta_ts - (E1mean ** 2))
这种基于 numpy
的方法看起来非常类似于 Python 方法,因为我不确定每个 np.ndarray
的大小是否相同。如果他们这样做了,那么您正在寻找的大部分内容都可以在大约 2-3 行代码中完成。 ?
(对于那些知道我在说什么的人,我忽略了用 0 填充的可能性。)