Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在numba中使用numpy随机选择_Python_Numpy_Numba - Fatal编程技术网

Python 在numba中使用numpy随机选择

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]

我试图用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]
    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()

我知道当前的限制,但幸运的是我的代码不是很复杂,所以应该可以。顺便问一下,为什么大小需要是元组?