gpt4 book ai didi

python - 麻麻。如何打开文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:15:08 24 4
gpt4 key购买 nike

我正在使用这个函数:

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 相比,它实际上加快了速度):

  • 大多数语言结构都是(forif 等),包括生成器
  • (几乎)所有数字类型
  • 元组
  • 同类列表
  • 很多数学和 numpy 的东西

但不支持文件输入/输出。所以你需要可以 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com