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

Numba vectorize生成ufunc调用accumulate出现ValueError如何解决

问题原因

该报错的核心原因是Numba通过@nb.vectorize生成的ufunc默认针对原生数值类型编译实现,本身不支持object类型运算。你之前使用np.frompyfunc生成的ufunc是基于Python对象封装实现的,所以可以指定dtype=object正常运行,二者的底层实现逻辑存在差异。

可行解决办法

  • 方法1:移除dtype=object参数,直接使用和输入数组匹配的数值类型
    你示例中的输入为整数数组,不需要依赖object类型中转,直接修改调用参数即可正常运行,修改后完整代码如下:
import numpy as np
import numba as nb
arr = np.arange(15).reshape((3,5))
@nb.vectorize
def myadd(x, y):
  return x+y
# 无需指定dtype=object,Numba会自动匹配输入的整数类型,也可显式指定dtype=np.int64确保兼容性
print(myadd.accumulate(arr, axis=1).astype(int))
  • 方法2:提前为vectorize装饰器声明支持的类型签名
    如果你的自定义函数需要处理多种数值类型,可以在装饰器中显式声明支持的输入输出类型,进一步提升类型匹配的稳定性:
import numpy as np
import numba as nb
arr = np.arange(15).reshape((3,5))
# 显式声明支持int64、float64两种输入输出组合,可根据实际需求扩展
@nb.vectorize([
    nb.int64(nb.int64, nb.int64),
    nb.float64(nb.float64, nb.float64)
])
def myadd(x, y):
  return x+y
print(myadd.accumulate(arr, axis=1).astype(int))

以上两种方法均可在你提供的环境版本(Python3.8.10+Numba0.54.0+Numpy1.20.3)下正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:45:04