- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用这个函数:
def read_example(water_bound, filename, conditions):
f = open(filename,"r")
for i in range(0, conditions):
lines = f.readline()
test = map(int, lines.split(' '))
water_bound.append( test[0]-1 )
我希望能够将它与 numba
一起使用。据我了解 here ,我必须在我的函数声明之前添加这一行:
@jit('void(int32[:], c_string_type, int32 )',nopython=True)
但是,我得到了这个错误:
NameError: name 'c_string_type' is not defined
最佳答案
你应该看看 numba documentation这解释了支持哪些 python 功能。这些是 nopython
模式支持的功能(与 python 相比,它实际上加快了速度):
for
、if
等),包括生成器但不支持文件输入/输出。所以你需要可以 jit
你的函数,但它会在 nopython
模式下失败。
只要分析你的函数就会清楚你不会得到任何加速:
文件 I/O 将回退到 python(慢速)模式:
f = open(filename,"r")
这个 for 循环可以在 nopypthon
模式下工作,因为它是受支持的(如果循环内的所有内容都可以用 numba 结构编译):
for i in range(0, conditions):
不幸的是,readline 又是文件 I/O,不受支持:
lines = f.readline()
像split
这样的字符串操作也不能在nopython
模式下编译:
test = map(int, lines.split(' '))
如果(且仅当)您的列表 water_bound
将仅包含数字并且您想附加另一个数字它应该可以工作(请参阅 numba list reference )但是对于字符串我无法获取它我的电脑用 nopython
编译。
water_bound.append( test[0]-1 )
所以你可以jit
你的函数,但是因为它回到了python模式,你不需要为signatures
而烦恼(因为它们才开始变得重要如果你进入快速 nopython 模式)并且很可能你不会看到任何速度优势:
from numba import jit
@jit
def read_example_numba(water_bound, filename, conditions):
f = open(filename,"r")
for i in range(0, conditions):
lines = f.readline()
test = map(int, lines.split(' '))
water_bound.append( test[0]-1 )
在我的电脑上,它需要一些随机生成的文件:
With jit: 10000 loops, best of 3: 78.1 ms per loop
Without jit: 10000 loops, best of 3: 71.4 ms per loop
你应该看看 Numba Documentation Examples它们显示了可以加速哪种功能。
关于python - 麻麻。如何打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35821355/
我正在使用这个函数: def read_example(water_bound, filename, conditions): f = open(filename,"r") f
我是一名优秀的程序员,十分优秀!