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 ord
和 chr
函数。但是,对于您的最小示例,您以可读性较差的函数结尾:
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 起)
我正在使用 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 ord
和 chr
函数。但是,对于您的最小示例,您以可读性较差的函数结尾:
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 起)