小编smo*_*loy的帖子

加速Cython中的数值集成

作为物理计算的一部分,我从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)

python performance cython

1
推荐指数
1
解决办法
885
查看次数

使用折叠构建字符串,并希望通过分配正确的容量来加快速度

我在 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是错误的吗?也许可以给出一个关于构建这个字符串的更好方法的提示?

fold rust pre-allocation

0
推荐指数
1
解决办法
79
查看次数

标签 统计

cython ×1

fold ×1

performance ×1

pre-allocation ×1

python ×1

rust ×1