You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Numba即时编译:列表类型与多返回值的函数签名配置问题

Numba函数签名:异构列表与多返回值的处理

一、异构返回列表的签名问题

你的Cal函数返回的是包含整数、二维numpy数组、整数的异构列表,Numba的ListType要求列表元素类型必须同构,所以直接用nb.ListType()是无效的。这里提供两种处理方案:

1. 使用object类型列表(不推荐,性能差)

如果必须用列表返回异构元素,可以指定元素类型为nb.pyobject,但这种方式会失去Numba的编译优化优势,因为object类型无法被高效处理:

import numba as nb
import numpy as np

@nb.jit(nb.ListType(nb.pyobject))
def Cal():
    return [1, np.zeros(shape=[5, 5]), 3]

a = Cal()

2. 改用元组返回(推荐,性能最优)

Numba对异构元组的支持远好于异构列表,你可以把返回值改成元组,然后用nb.types.Tuple定义每个元素的具体类型:

import numba as nb
import numpy as np

# 签名对应:(int64, 二维float64数组, int64)
@nb.jit(nb.types.Tuple((nb.int64, nb.float64[:, :], nb.int64)))
def Cal():
    return 1, np.zeros(shape=[5, 5]), 3

a = Cal()

二、多返回值的函数签名指定

Numba中多返回值本质是返回一个元组,所以直接用nb.types.Tuple包裹每个返回值的类型即可。以你的TwoOutput函数为例:

import numba as nb

# 签名对应返回两个int64类型的值
@nb.jit(nb.types.Tuple((nb.int64, nb.int64)))
def TwoOutput():
   return 1, 2

x, y = TwoOutput()

如果想简化写法,也可以用Numba的平台相关类型(比如nb.int_表示当前平台的默认整数类型):

@nb.jit(nb.types.Tuple((nb.int_, nb.int_)))
def TwoOutput():
   return 1, 2

内容的提问来源于stack exchange,提问作者Qiang Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:11:08