我定义了一个jited函数,使用numba返回一个元组。有点像下面。
import numba as nb
from numba.types import Tuple
import numpy as np
FOO_T = Tuple.from_types((nb.types.NPDatetime('M'), nb.int64))
@nb.jit([FOO_T(nb.types.NPDatetime('M'), nb.types.NPDatetime('M'))], nopython=True)
def foo(input1, input2):
temp1 = input1
temp2 = np.array(input1 - input2).view(nb.int64)
output = (temp1, temp2)
return outputA TypeError报告如下。输出元组的第二个元素定义为int64。然而,它实际上被编译为array(int64, 0d, C)。
TypingError: No conversion from Tuple(datetime64[M], array(int64, 0d, C)) to Tuple(datetime64[M], int64) for '$38return_value.15', defined at None不知道怎样才能保持一致。谢谢你的帮助。
发布于 2022-03-22 11:52:26
np.array(input1 - input2).view(nb.int64)是一个int64数组,而不是标量。这就是为什么Numba报告一个错误。注意,np.array(input1 - input2)的结果是一种奇怪的类型:维度0的数组。AFAIK,这就是Numpy用来表示标量的东西,但是这样的数组不能在Numba中索引,也不能转换为标量。
您可以减去两个标量,用np.array([input1 - input2])构建一个数组,然后调用view。尽管如此,view可能不是您在这里要做的,因为它将NPDatetime的二进制表示形式重新解释为整数。这确实是不安全的,而且AFAIK没有理由认为这是可行的。您只需将结果转换为(np.uint64)(input1 - input2)就可以了。
https://stackoverflow.com/questions/71552836
复制相似问题