Python: numba 可以在 nopython 模式下处理字符串数组吗?

Python: can numba work with arrays of strings in nopython mode?

我正在使用 pandas 0.16.2、numpy 1.9.2 和 numba 0.20。

有没有办法让 numba 在 nopython 模式下支持字符串数组? 或者,我能否以某种方式将字符串转换为 numba 可以识别的数字?

我必须 运行 字符串数组上的某些循环(pandas 数据帧中的一列);如果我可以使用 numba,代码会快得多。

我想出了这个最小的例子来说明我的意思:

import numpy as np
import numba

x=np.array(['some','text','this','is'])

@numba.jit(nopython=True)
def numba_str(txt):
    x=0
    for i in xrange(txt.size):
        if txt[i]=='text':
            x += 1
    return x

print numba_str(x)

我得到的错误是:

Failed at nopython (nopython frontend)
Undeclared ==([char x 4], str)

谢谢!

Numba 尚不支持字符串(截至版本 20.0)。实际上,"character sequences are supported, but no operations are available on them".

事实上,一种可能的解决方法是将字符解释为数字。对于 ASCII 字符,这很简单,请参阅 Python ordchr 函数。但是,对于您的最小示例,您以可读性较差的函数结尾:

import numpy as np
import numba

x=np.array(['some','text','this','is'])

@numba.jit(nopython=True)
def numba_str(txt):
    x=0
    for i in xrange(txt.shape[0]):
        if (txt[i,0]==116 and  # 't'
            txt[i,1]==101 and  # 'e'
            txt[i,2]==120 and  # 'x'
            txt[i,3]==116):    # 't'
            x += 1
    return x

print numba_str(x.view(np.uint8).reshape(-1, x.itemsize))

numba 现在支持 str(自版本 0.41 起)