如何(有效地)在Cython中构造一个字符串?

时间:2016-12-07 15:21:59

标签: python string char cython

我试图用cython来固定我的python代码。

在cython中,我尝试删除的一个瓶颈是在循环中构造文件名(字符串)。 但是,我无法以cython方式重新编写我的python代码:

{{1}}

任何关于如何重写这一点的帮助将非常感谢! 感谢

1 个答案:

答案 0 :(得分:0)

我怀疑你可以加速Python中的格式化。例如:

In [67]: lat=np.arange(6).reshape(2,3)
In [68]: names=[]
In [69]: for i in range(lat.shape[0]):
    ...:     for j in range(lat.shape[1]):
    ...:        name = 'path/'+'directory'+format(lat[i,j],'02d')+'_'+format(lat
    ...: [i,j]+3,'02d')+'.csv'
    ...:        names.append(name)
    ...:        
In [70]: names
Out[70]: 
['path/directory00_03.csv',
 'path/directory01_04.csv',
 'path/directory02_05.csv',
 'path/directory03_06.csv',
 'path/directory04_07.csv',
 'path/directory05_08.csv']

可以重写为:

In [71]: names=[]
In [72]: fmt='path/'+'directory/'+'%02d_%02d.csv'
In [73]: for i in range(lat.shape[0]):
    ...:     for j in range(lat.shape[1]):
    ...:        name = fmt%(lat[i,j],lat[i,j])
    ...:        names.append(name)

换句话说,在开始时创建一个格式字符串,并重复使用它。

或者PY3样式format

fmt = 'path/directory{:02d}_{:02d}.csv'
name = fmt.format(lat[i,j],lat[i,j])

快速时间测试表明2-3倍的加速(使用较旧的%样式更多)。