Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/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@vectorize target=&x27;平行';打字错误_Python_Numba - Fatal编程技术网

Python numba@vectorize target=&x27;平行';打字错误

Python numba@vectorize target=&x27;平行';打字错误,python,numba,Python,Numba,如果我定义 import numba as nb import numpy as np @nb.vectorize def nb_vec(x): if x>0: x=x+100 return x 然后 顺利运行 但是如果我添加目标选项,比如 @nb.vectorize(target='parallel') def nb_vec(x): if x>0: x=x+100 return x 然后 输出错误消息 ------

如果我定义

import numba as nb
import numpy as np
@nb.vectorize
def nb_vec(x):
    if x>0:
        x=x+100
    return x
然后

顺利运行

但是如果我添加目标选项,比如

@nb.vectorize(target='parallel')
def nb_vec(x):
    if x>0:
        x=x+100
    return x
然后

输出错误消息

---------------------------------------------------------------------------TypeError回溯(最近的调用 最后)在 1 x=np.随机。随机(1000000) ---->2 nb_vec(x)

TypeError:输入类型不支持ufunc'nb_vec',并且 根据,无法将输入安全地强制为任何受支持的类型 铸造规则“安全”


有什么问题吗?

在numba 0.46中,无签名的
numba.vectorize
decorator将创建一个动态通用函数,这意味着它在调用时根据类型编译代码。所以你不需要提供签名

import numpy as np
import numba as nb

@nb.vectorize()
def nb_vec(x):
    if x > 0:
        x = x + 100
    return x

>>> nb_vec
<numba._DUFunc 'nb_vec'>
>>> nb_vec.types
[]
>>> nb_vec(np.ones(5))
array([101., 101., 101., 101., 101.])
>>> nb_vec.types
['d->d']
这里的解决方案是在使用并行矢量化时指定具有适当类型的签名:

import numpy as np
import numba as nb

@nb.vectorize(
    [nb.int32(nb.int32), 
     nb.int64(nb.int64), 
     nb.float32(nb.float32), 
     nb.float64(nb.float64)], 
    target='parallel')
def nb_vec(x):
    if x > 0:
        x = x + 100
    return x
import numpy as np
import numba as nb

@nb.vectorize()
def nb_vec(x):
    if x > 0:
        x = x + 100
    return x

>>> nb_vec
<numba._DUFunc 'nb_vec'>
>>> nb_vec.types
[]
>>> nb_vec(np.ones(5))
array([101., 101., 101., 101., 101.])
>>> nb_vec.types
['d->d']
import numpy as np
import numba as nb

@nb.vectorize(target='parallel')
def nb_vec(x):
    if x > 0:
        x = x + 100
    return x

>>> nb_vec
<ufunc 'nb_vec'>
>>> nb_vec.types
[]
import numpy as np
import numba as nb

@nb.vectorize(
    [nb.int32(nb.int32), 
     nb.int64(nb.int64), 
     nb.float32(nb.float32), 
     nb.float64(nb.float64)], 
    target='parallel')
def nb_vec(x):
    if x > 0:
        x = x + 100
    return x