gpt4 book ai didi

python - 无法从 njit 函数内部调用 numba 函数

转载 作者:行者123 更新时间:2023-12-04 12:16:30 25 4
gpt4 key购买 nike

numba 合作,我偶然发现了非常意想不到的行为。我创建了一个 nb.njit我试图在其中创建一个 nb.typed.List 的函数的 int8 numpy数组,所以我尝试创建一个对应的 numba类型。

nb.int8[:]  # type of the list elements
因此,我将此类型设置为 nb.typed.List通过 lsttype关键词。
l = nb.typed.List(lsttype=nb.int8[:])  # list of int8 numpy ndarrays
我得到的是:
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
No implementation of function Function(<built-in function getitem>) found for signature:

>>> getitem(class(int8), slice<a:b>)

There are 16 candidate implementations:
- Of which 16 did not match due to:
Overload in function 'getitem': File: <built-in>: Line <N/A>.
With argument(s): '(class(int8), slice<a:b>)':
No match.
我想,这意味着 numba正在尝试切片 nb.int8类型对象,就好像它不理解符号一样。
所以,我尝试了另一种方式,创建了一个空数组 np.int8类型,并使用 nb.typeof功能。
nb.typeof(np.array([], dtype=np.int8))
它返回:
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Unknown attribute 'typeof' of type Module(<module 'numba' from '/Users/.../venv37/lib/python3.7/site-packages/numba/__init__.py'>)
这个我不明白!怎么可以 numba看不到 本身 ?
最小的例子非常简单:
import numba as nb
import numpy as np

@nb.njit
def v():
print(nb.typeof(np.array([], dtype=np.int8)))

v()
所以我尝试使用相同的功能,但没有 @nb.njit .
和它打印!
array(int8, 1d, C)
另外,我尝试在函数内部导入 numba,因为它没有看到模块,但它产生了:
numba.core.errors.UnsupportedError: Failed in nopython mode pipeline (step: analyzing                    bytecode)
Use of unsupported opcode (IMPORT_NAME) found
我尝试重新安装和更新 numbanumpy , 还。
这是什么诡计?

最佳答案

我发现了一个讨厌的解决方法。

@nb.njit
def f(types=(nb.int8[::1], nb.float64[::1])):
a = nb.typed.List.empty_list(types[0])
b = nb.typed.List.empty_list(types[1])
# and so on...
[::1]表示一维 numpy.ndarray C型。

关于python - 无法从 njit 函数内部调用 numba 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62503481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com