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

2024-05-17 18:07:44 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

 cdef str filename, path

 for ii in range(len(a0)):
   for jj in range(len(a1)):
       filename = self.path + 'directory' + format(int(lon[ii,jj]),'02d')+ '_' + format(int(lat[ii,jj]),'02d') + '.csv'

如果您能帮助我们重写这篇文章,我们将不胜感激! 谢谢


Tags: path代码informatforlen文件名range
1条回答
网友
1楼 · 发布于 2024-05-17 18:07:44

我想你可以加快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']

可改为:

^{pr2}$

换句话说,在开始处创建一个格式字符串,然后重复使用。在

或者对于PY3样式format

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

快速时间测试建议2-3倍的加速(更老的%样式)。在

相关问题 更多 >