Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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.jit加速代码_Python_Numpy_Jit_Numba - Fatal编程技术网

Python 使用numba.jit加速代码

Python 使用numba.jit加速代码,python,numpy,jit,numba,Python,Numpy,Jit,Numba,我正在尝试使用numba.jit来加速python程序 我的程序的一个函数将一个floats数组和一个标量相乘,标量总是一个整数 import numpy myarray = numpy.array([0.2,0.26,0.45,0.78],dtype=float) def multiply(array, scalar): newarray = array * scalar return newarray newarray = multiply(myarray,5) 当我n

我正在尝试使用
numba.jit来加速python程序

我的程序的一个函数将一个
float
s数组和一个标量相乘,标量总是一个整数

import numpy
myarray = numpy.array([0.2,0.26,0.45,0.78],dtype=float)

def multiply(array, scalar):
    newarray = array * scalar
    return newarray

newarray = multiply(myarray,5)
当我
numba.jit()
my函数具有以下签名时,函数运行速度会慢一个数量级:

fastmultiply = numba.jit("f4[:](f4[:],int8)")(multiply)
这是因为我声明了错误的数据类型:
f4[:]
int8

或者,我的函数的编码方式不允许使用
numba.jit()

节省工作量v/s生成的
jit
-代码重复使用量进行加速 JIT可以帮助解决这样的情况,即大量的重复使用证明了即时编译的成本是合理的

因此,随着
.jit()
编译器处理源代码,代码的第一次运行需要更长的时间

注意工作的经济性-对于“短”代码,这可能比最终jit编译的产品需要几个数量级的时间,因此,只有在有数百万个重复使用案例的情况下,调整这样的初始机会成本惩罚才可能是合理的

对于一个“计算密集度更高”的代码,通常是一个非平凡的卷积、迭代再处理方法等,jit编译的成本甚至在单独的情况下也是合理的


这是一个单独的主题,错误的类型可能会影响您的处理

显式
.jit()
签名或
.autojit()
这就是哈姆雷特的困境

嗯,这取决于你的喜好应收集任何一种方法的初始调用/重复使用调用持续时间的定量证据,并根据预期的重复使用调用量(成本/收益不平等)进行决定

需要分析/调整的
autojit()签名的额外成本,可能会使成本/收益不平等的边缘变形

维护
.jit()
显式签名可能会让人头疼

小心:

首先
np.float
不是
f4

|>>> np.arange( 2, dtype = float ).dtype
dtype('float64')

下一步,有一些情况(
np.nan\u to_num()
就是其中之一),可能会收到“静默”向上播放的
dtype
np.float64
,这可能会导致头痛,寻找
dtype
numba.jit()冲突的地方
显式签名。

您的函数所做的唯一一件事就是调用一个已经优化过的numpy函数-没有太多的优化潜力。因此,在使用numpy数组时,对于提高性能没有什么可做的?numba主要用于加速无法利用numpy快速矢量化数组的代码选项,例如,在其他情况下,您被迫对
循环使用嵌套Python
。numpy数组已经有了高度优化的乘法方法,因此在本例中使用numba不太可能做得更好。尽管如此,编译函数会降低一个数量级的性能,这是非常有趣的。
|>>> np.arange( 2, dtype = float ).dtype
dtype('float64')