将浮点数转换为字符串 numba python numpy 数组

convert float to string numba python numpy array

我是 运行 一个 @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

目前不支持numpy.str功能。 Numba 的网站上提供了所有 supported numpy functions 的列表。

内置的str也不支持。这可以在 supported Python features page.

上查看

做你想做的事情的唯一方法是以某种方式制作一个将浮点数转换为字符串的函数,只使用 Numba 支持的 Python 和 Numpy 的功能。

在朝这个方向前进之前,我会重新考虑将浮点数转换为字符串的必要性。它可能不是很有效,并且由于将浮点数转换为字符串而增加了一些开销,您可能会失去一些函数的优势。

当然,如果不进一步了解该项目,则很难判断。

我想要一个浮点数到字符串的转换,它提供一个像“23.45”这样的带有两个小数位的字符串。 我的解决方案是这样的。也许对某人有帮助。

    def floatToString(self, floatnumber:float32) -> str:
        stringNumber:str = ""
        whole:int = math.floor(floatnumber)
        frac:int = 0
        digits:float = float(floatnumber % 1)
        digitsTimes100:float = float(digits) * float(100.0)
        if digitsTimes100 is not None:
            frac = math.floor(digitsTimes100)
        stringNumber = str(whole)+"."+str(frac)
        return stringNumber

注意四舍五入问题,但这对我来说已经足够了。