【发布时间】:2023-03-15 18:49:01
【问题描述】:
我正在尝试在函数中使用 Numpy 的均值和标准差函数,但它们似乎与 Numba 不兼容,尽管 Numba documentation states them as compatible。
我的代码如下:
import numpy as np
import numba
a = [1, 2, 3, 4, 5, 6]
# @numba.jit(nopython=True, parallel=True)
def nmeanstd(a, n):
b = []; c = []
for i in range(n):
b.append(np.mean(a))
c.append(np.std(a))
return b, c
mean, std = nmeanstd(a, 10)
查看mean 和std 时的输出是预期的:
mean
Out[31]: [3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5]
std
Out[32]:
[1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933,
1.707825127659933]
但我不知道为什么,当我取消注释 @numba.jit 函数时,会出现以下消息:
TypingError: No implementation of function Function(<function mean at 0x11a0e6e50>) found for signature:
mean(reflected list(int64)<iv=None>)
There are 2 candidate implementations:
- Of which 2 did not match due to:
Overload of function 'mean': File: numba/core/typing/npydecl.py: Line 378.
With argument(s): '(reflected list(int64)<iv=None>)':
No match.
During: resolving callee type: Function(<function mean at 0x11a0e6e50>)
如果我注释我计算平均值的行,std 也是如此。怎么了?我虽然他们会正确地使用numba 运行。您知道使用 Numba 计算均值和标准差的任何方法吗?
【问题讨论】:
-
如果你想要一个高效的代码,你真的应该避免使用列表(除非你正在使用一组 unbounded 项,这里不是这种情况)。请注意,Numba 不能很好地支持 Python 列表,因为它们可以包含不同类型的项目。 Numba 有自己的类型列表(但您需要将它们从/转换为缓慢的 python 列表)。