python-3.x - Numba 命名元组签名

标签 python-3.x signature numba namedtuple

我正在尝试在 Numba 中指定命名元组的返回类型,但我无法这样做。有人可以帮忙吗?考虑以下最少代码:

import numba as nb
from   collections import namedtuple

NT = namedtuple('NT',['sum','sum2'])

@nb.njit((nb.types.NamedTuple([nb.float64,nb.float64],NT))(nb.int64,nb.float64[:,:]),fastmath=True)
def arrsum_njit(nn,xx):
    arraysum = 0.0
    out = NT(sum=arraysum,sum2=arraysum)
    return out

我收到错误

No conversion from NT(float64 x 2) to NT(float64, float64) for '$20return_value.7', defined at None

File "numbanamedtuple.py", line 10:
def arrsum_njit(nn,xx):
    <source elided>
    out = NT(sum=arraysum,sum2=arraysum)
    return out
    ^

During: typing of assignment at numbanamedtuple.py (10)

File "numbanamedtuple.py", line 10:
def arrsum_njit(nn,xx):
    <source elided>
    out = NT(sum=arraysum,sum2=arraysum)
    return out

最佳答案

问题是“过度优化”的 numba 编译器(bug)。将不同类型的变量添加到元组中,以告诉编译器使用异构元组(内部类)。

import numba as nb
from   collections import namedtuple

NT = namedtuple('NT',['sum','sum2','dummy'])

@nb.njit((nb.types.NamedTuple([nb.float64,nb.float64,nb.int64],NT))(nb.int64,nb.float64[:,:]),fastmath=True)
def arrsum_njit(nn,xx):
    arraysum = 0.0
    out = NT(sum=arraysum,sum2=arraysum,dummy=1)
    return out

更新: 测试:

  • Numba 0.51.2/Windows
  • Numba 0.48.0/Google colab - Linux Ubuntu 18.04.5 LTS

关于python-3.x - Numba 命名元组签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64458824/

相关文章:

xml - XSD 元素中的命名空间发现无效内容

python - 验证PE文件的签名

python numba 元组列表列表

python - 在python中有一个列表,使用lambda和map/filter生成新列表

Python NtQueryDirectoryFile(文件信息结构)

java - Woocommerce api rest v2 签名不匹配

python - Numba nopython 模式不能接受二维 bool 索引

pytorch - 如何将 Numba 用于 Pytorch 张量?

Django:无法配置处理程序 'console'

python - if-else 链有更短的方法吗?