如何在 numba 中使用 numpy 函数

问题描述

我必须反转我的矩阵。但我收到一个错误。如何解决

@njit
def inv():
    x = [[1,2],[9,0]]
    inverted = np.linalg.inv(x)
    return x
inv()

TypingError:在 nopython 模式管道中失败(步骤:nopython 前端)
未找到用于签名的函数 Function() 的实现:

inv(list(list(int64)))

有 2 个候选实现:
- 其中 2 个不匹配的原因是:
函数 'inv_impl' 中的重载:文件:numba/np/linalg.py:第 833 行。
带参数:'(list(list(int64)))':
由于实现引发了特定错误而被拒绝:
TypingError:np.linalg.inv() 仅支持数组类型
来自 /opt/conda/envs/rapids/lib/python3.7/site-packages/numba/np/linalg.py:767

期间:解析被调用者类型:Function()
期间:在 (4)
打字

文件“”,第 4 行:
def inv():


x = [[1,0]]
倒置 = np.linalg.inv(x)

解决方法

您需要提供 np.arrayfloat dtype 的 complex,而不是一些带有 listint

from numba import jit
import numpy as np  

@jit(nopython=True)
def inv():
    x = np.array([[1,2],[9,0]],dtype=np.float64) # explicitly specify float64 dtype
    # x = np.array([[1.,2.],[9.,0.]]) # or just add floating points
    inverted = np.linalg.inv(x)
    return x
inv()

参见 numba 中的 linear algebra supported numpy features