Python 在numba中使用numpy随机选择
我试图用NUBA(0.52版,在windows 10上,64位)重写我的一些代码,但是我得到了一个错误,使用numpy random choice我不理解。如果我不使用概率选项,Numpy random choice应该与numba一起工作。代码如下:Python 在numba中使用numpy随机选择,python,numpy,numba,Python,Numpy,Numba,我试图用NUBA(0.52版,在windows 10上,64位)重写我的一些代码,但是我得到了一个错误,使用numpy random choice我不理解。如果我不使用概率选项,Numpy random choice应该与numba一起工作。代码如下: import numpy as np from numba import jit @jit(nopython=True) def Calc(): a = np.array([1, -1]) size = [3, 3, 3]
import numpy as np
from numba import jit
@jit(nopython=True)
def Calc():
a = np.array([1, -1])
size = [3, 3, 3]
values = np.random.choice(a, size=size)
Calc()
我得到以下错误:
Traceback (most recent call last):
File "\\uni.au.dk\Users\au684834\Documents\Python\Aarhus\Simulations\Ising\Tests\Numbaerrors.py", line 10, in <module>
Calc()
File "C:\Users\au684834\Miniconda3\lib\site-packages\numba\core\dispatcher.py", line 414, in _compile_for_args
error_rewrite(e, 'typing')
File "C:\Users\au684834\Miniconda3\lib\site-packages\numba\core\dispatcher.py", line 357, in error_rewrite
raise e.with_traceback(None)
numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
[1m[1m[1mNo implementation of function Function(<built-in method choice of numpy.random.mtrand.RandomState object at 0x000002B05203B340>) found for signature:
>>> choice(array(int64, 1d, C), size=list(int64)<iv=[3, 3, 3]>)
There are 2 candidate implementations:
[1m - Of which 1 did not match due to:
Overload in function 'choice': File: numba\cpython\randomimpl.py: Line 1346.
With argument(s): '(array(int64, 1d, C), size=list(int64)<iv=None>)':[0m
[1m Rejected as the implementation raised a specific error:
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
[1m[1m[1mNo implementation of function Function(<built-in function empty>) found for signature:
>>> empty(list(int64)<iv=None>, class(int64))
There are 2 candidate implementations:
[1m - Of which 2 did not match due to:
Overload of function 'empty': File: numba\core\typing\npydecl.py: Line 507.
With argument(s): '(list(int64)<iv=None>, class(int64))':[0m
[1m No match.[0m
[0m
[0m[1mDuring: resolving callee type: Function(<built-in function empty>)[0m
[0m[1mDuring: typing of call at C:\Users\au684834\Miniconda3\lib\site-packages\numba\cpython\randomimpl.py (1403)
[0m
[1m
File "..\Users\au684834\Miniconda3\lib\site-packages\numba\cpython\randomimpl.py", line 1403:[0m
[1m def choice_impl(a, size=None, replace=True):
<source elided>
if replace:
[1m out = np.empty(size, dtype)
[0m [1m^[0m[0m
[0m
raised from C:\Users\au684834\Miniconda3\lib\site-packages\numba\core\typeinfer.py:1071
[1m - Of which 1 did not match due to:
Overload in function 'choice': File: numba\cpython\randomimpl.py: Line 1346.
With argument(s): '(array(int64, 1d, C), size=list(int64)<iv=[3, 3, 3]>)':[0m
[1m Rejected as the implementation raised a specific error:
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
[1m[1m[1mNo implementation of function Function(<built-in function empty>) found for signature:
>>> empty(list(int64)<iv=[3, 3, 3]>, class(int64))
There are 2 candidate implementations:
[1m - Of which 2 did not match due to:
Overload of function 'empty': File: numba\core\typing\npydecl.py: Line 507.
With argument(s): '(list(int64)<iv=None>, class(int64))':[0m
[1m No match.[0m
[0m
[0m[1mDuring: resolving callee type: Function(<built-in function empty>)[0m
[0m[1mDuring: typing of call at C:\Users\au684834\Miniconda3\lib\site-packages\numba\cpython\randomimpl.py (1403)
[0m
[1m
File "..\Users\au684834\Miniconda3\lib\site-packages\numba\cpython\randomimpl.py", line 1403:[0m
[1m def choice_impl(a, size=None, replace=True):
<source elided>
if replace:
[1m out = np.empty(size, dtype)
[0m [1m^[0m[0m
[0m
raised from C:\Users\au684834\Miniconda3\lib\site-packages\numba\core\typeinfer.py:1071
[0m
[0m[1mDuring: resolving callee type: Function(<built-in method choice of numpy.random.mtrand.RandomState object at 0x000002B05203B340>)[0m
[0m[1mDuring: typing of call at \\uni.au.dk\Users\au684834\Documents\Python\Aarhus\Simulations\Ising\Tests\Numbaerrors.py (8)
[0m
[1m
File "\\uni.au.dk\Users\au684834\Documents\Python\Aarhus\Simulations\Ising\Tests\Numbaerrors.py", line 8:[0m
[1mdef Calc():
<source elided>
size = [3, 3, 3]
[1m values = np.random.choice(a, size=size)
[0m [1m^[0m[0m
回溯(最近一次呼叫最后一次):
文件“\\uni.au.dk\Users\au684834\Documents\Python\Aarhus\Simulations\Ising\Tests\Numbaerrors.py”,第10行,在
Calc()
文件“C:\Users\au684834\Miniconda3\lib\site packages\numba\core\dispatcher.py”,第414行,位于\u compile\u for \u args中
重写错误(例如,“键入”)
文件“C:\Users\au684834\Miniconda3\lib\site packages\numba\core\dispatcher.py”,第357行,错误\u重写
使用_回溯(无)提升e
numba.core.errors.TypingError:在nopython模式管道中失败(步骤:nopython前端)
[1m[1m[1m未找到签名函数()的实现:
>>>选择(数组(int64,1d,C),大小=列表(int64))
有两种候选实现:
[1m-其中1个不匹配,原因是:
函数“choice”中的重载:文件:numba\cpython\randoimpl.py:第1346行。
带参数:“(数组(int64,1d,C),size=list(int64)):[0m
[1m被拒绝,因为实施引发了特定错误:
TypingError:在nopython模式管道中失败(步骤:nopython前端)
[1m[1m[1m未找到签名函数()的实现:
>>>空(列表(int64),类(int64))
有两种候选实现:
[1m-其中2个不匹配,原因是:
函数“empty”的重载:文件:numba\core\typing\npydecl.py:第507行。
带参数:“(列表(int64),类(int64))”:[0m
[1米没有对手
[0m
[0m[1mDuring:解析被调用方类型:函数()[0m]
[0m[1mDuring:在C:\Users\au684834\Miniconda3\lib\site packages\numba\cpython\randompl.py(1403)处键入调用
[0m
[1m
文件“.\Users\au684834\Miniconda3\lib\site packages\numba\cpython\randoimpl.py”,第1403行:[0m
[1m def choice_impl(a,大小=无,替换=真):
如果更换:
[1m out=np.空(大小、数据类型)
[0m[1m^[0m[0m
[0m
从C:\Users\au684834\Miniconda3\lib\site packages\numba\core\typeinfer.py引发:1071
[1m-其中1个不匹配,原因是:
函数“choice”中的重载:文件:numba\cpython\randoimpl.py:第1346行。
带参数:“(数组(int64,1d,C),size=list(int64)):[0m
[1m被拒绝,因为实施引发了特定错误:
TypingError:在nopython模式管道中失败(步骤:nopython前端)
[1m[1m[1m未找到签名函数()的实现:
>>>空(列表(int64),类(int64))
有两种候选实现:
[1m-其中2个不匹配,原因是:
函数“empty”的重载:文件:numba\core\typing\npydecl.py:第507行。
带参数:“(列表(int64),类(int64))”:[0m
[1米没有对手
[0m
[0m[1mDuring:解析被调用方类型:函数()[0m]
[0m[1mDuring:在C:\Users\au684834\Miniconda3\lib\site packages\numba\cpython\randompl.py(1403)处键入调用
[0m
[1m
文件“.\Users\au684834\Miniconda3\lib\site packages\numba\cpython\randoimpl.py”,第1403行:[0m
[1m def choice_impl(a,大小=无,替换=真):
如果更换:
[1m out=np.空(大小、数据类型)
[0m[1m^[0m[0m
[0m
从C:\Users\au684834\Miniconda3\lib\site packages\numba\core\typeinfer.py引发:1071
[0m
[0m[1mDuring:解析被调用方类型:函数()[0m]
[0m[1M期间:在\\uni.au.dk\Users\au684834\Documents\Python\Aarhus\Simulations\Ising\Tests\Numbaerrors.py键入调用(8)
[0m
[1m
文件“\\uni.au.dk\Users\au684834\Documents\Python\Aarhus\Simulations\Ising\Tests\Numbaerrors.py”,第8行:[0m
[1mdef Calc():
大小=[3,3,3]
[1m值=np.随机选择(a,大小=大小)
[0m[1m^[0m[0m
不确定我做错了什么。使用
元组作为大小,而不是列表
:
@njit
def calc():
a=np.array([1,-1])
大小=(3,3,3)
值=np.随机.选择(a,大小=大小)
返回值
现在:
>>calc()#doctest:+SKIP
数组([-1,1,1],
[-1, -1, 1],
[-1, -1, -1]],
[[-1, -1, 1],
[-1, -1, -1],
[-1, -1, -1]],
[[ 1, 1, 1],
[ 1, 1, 1],
[ 1, -1, 1]]])
但是请注意,并非所有的numpy
函数都受numba
支持。许多函数中的一个例子是np.clip()
我知道当前的限制,但幸运的是我的代码不是很复杂,所以应该可以。顺便问一下,为什么大小需要是元组?