【发布时间】:2017-04-22 14:47:11
【问题描述】:
我正在尝试用 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'
任何关于如何重写它的帮助将不胜感激! 谢谢
【问题讨论】:
-
请不要使用“a0”、“a1”、“ii”和“jj”之类的变量——它们很难推理。此外,您不需要执行
range(len(a0)),如果您的变量是可迭代的,只需执行for ii in a0或等效项。 -
format是一个Python函数,字符串+也是如此。lon[ii,jj]索引 (numpy) 也是如此。cython可以转换为“纯”C 的东西并不多。 -
快速浏览一下
cython字符串文档cython.readthedocs.io/en/latest/src/tutorial/strings.html,表明它对加速字符串操作没有多大作用。他们不鼓励使用c字符串。与C++字符串库的接口可能会起作用。 -
您打算使用文件名读取还是写入
csv?我的猜测是创建文件名字符串比打开和使用该文件花费的时间要少得多。优化此任务可能不值得。 -
而
format的使用表明您使用的是 Py3 和 unicode 字符串。阅读cython在c中关于不支持 unicode 的说法。