首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numba中的int64与数组(int64,0d,C)

numba中的int64与数组(int64,0d,C)
EN

Stack Overflow用户
提问于 2022-03-21 04:30:27
回答 1查看 233关注 0票数 0

我定义了一个jited函数,使用numba返回一个元组。有点像下面。

代码语言:javascript
复制
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 output

A TypeError报告如下。输出元组的第二个元素定义为int64。然而,它实际上被编译为array(int64, 0d, C)

代码语言:javascript
复制
TypingError: No conversion from Tuple(datetime64[M], array(int64, 0d, C)) to Tuple(datetime64[M], int64) for '$38return_value.15', defined at None

不知道怎样才能保持一致。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)就可以了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71552836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档