我正在运行一个@nb.njit
函数,试图在其中将一个整数放入字符串数组中。
import numpy as np
import numba as nb
@nb.njit(nogil=True)
def func():
my_array = np.empty(6, dtype=np.dtype("U20"))
my_array[0] = np.str(2.35646)
return my_array
if __name__ == '__main__':
a = func()
print(a)
字符串
我得到以下错误:
numba.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of Function(<class 'str'>) with argument(s) of type(s): (float64)
型
我应该使用哪个函数在numba
中执行从float
到string
的转换?
5条答案
按热度按时间vltsax251#
numpy.str
功能目前还不支持。所有supportednumpy
functions的列表可以在Numba的网站上找到。也不支持内置的
str
。这可以在supported Python features page上检查。要做到这一点,唯一的方法是以某种方式创建一个将浮点数转换为字符串的函数,只使用Numba支持的Python和Numpy的功能。
在进入这个方向之前,我仍然要重新考虑将浮点数转换为字符串的必要性。它可能不是很有效,并且由于将浮点数转换为字符串而增加了一些开销,您可能会失去一些函数的好处。
当然,如果不了解更多关于该项目的信息,这很难说。
pgky5nke2#
我想要一个浮点数到字符串的转换,它提供了一个像“23.45”这样的字符串,带有两个小数位。我的解决方案是这样的。也许它能帮助某人。
字符串
要注意四舍五入的问题,但这对我来说已经足够了。
k2arahey3#
提供了一种相对通用的方法:
字符串
与纯Python相比,它的精确度较低,速度也相对较慢(大约是纯Python的3倍):
型
但在Numba中为浮点型参数本机实现
str()
之前,可以将其用作一种解决方法。注意,边缘情况被相对粗略地处理,并且在最后1-2个数字中的错误相对频繁。
jgovgodb4#
虽然这并没有解决float-to-str转换,但我认为值得一提的是,在Numba的后续版本中,您可以在整数上使用
str()
:字符串
这比纯Python慢,但它可能有助于确保
njit()
加速。同样的功能还没有为浮动实现。
mqxuamgl5#
下面是一个简单的尝试:
1.更简单(如果它对你很重要)
1.可以更改精度
1.考虑NaN值
1.当第一个小数为0时工作(如0.05)
1.在Numba中编译
字符串
如果愿意,可以将
int(np.floor(_))
替换为math.floor(_)
请参考@norok2答案,以获得更强大/复杂的版本(带有科学符号等...)