作为物理计算的一部分,我从csv文件加载一个电场值列表,并将它们传递给Cython函数进行集成.这不是文件中值的简单求和,但需要在集成的每个步骤重新计算某个参数.通过重新组织代码,并将最慢的部分移动到Cython,我已经实现了速度的显着提升,但我怀疑还有进一步的优化可以做到.
这是我试图加速的Cython功能:
import numpy as np
cimport numpy as np
DTYPE = np.float
ctypedef np.float_t DTYPE_t
cdef float m = 938272046
cdef float c = 299792458
cimport cython
@cython.boundscheck(False)
def ELTintegration(float xelmax, float deltaT, float phi, float omega,
np.ndarray[DTYPE_t] zExtract, np.ndarray[DTYPE_t] EzExtract, float KEin):
cdef float integ = 0
cdef float xelmax_deltaT = xelmax * deltaT
cdef unsigned int i, loopLen=len(EzExtract)
cdef float v
cdef float z, Ez, phaseTerm, diff
cdef float newE, gamma, beta
for i in range(len(EzExtract)):
z …Run Code Online (Sandbox Code Playgroud) 我在 Rust 结构中有一个实现,它构建了一个非常大的字符串,最终将写入文件。我想知道是否可以通过确保字符串变量具有适当的容量来加快速度,但它并没有按照我预期的方式工作。
这就是我所做的:
let sum = izip!(self.ts, self.x, self.y).fold(String::with_capacity(capacity), |acc, x| {
format!("{}{}, {}, {}\n", acc, x.0, x.1, x.2)
});
Run Code Online (Sandbox Code Playgroud)
我认为该字符串将累积到第一个参数中,因此我用必要的容量实例化了它。然而,通过检查从 ( ) 输出的字符串的容量sum,我可以发现我的假设是错误的。
有人可以帮助我理解我的理解fold是错误的吗?也许可以给出一个关于构建这个字符串的更好方法的提示?