Python 用麻木加速拍摄?

Python 用麻木加速拍摄?,python,arrays,numpy,numba,Python,Arrays,Numpy,Numba,使用numba可以加速np.take吗 这是我的尝试,但速度要慢得多。我不能使用nopython模式,因为它不喜欢np.empty_-like命令 import numba import numpy as np from timer import Timer def take( x, indices ): result = np.empty_like( indices, dtype=x.dtype ) for i in range( len( indices )

使用numba可以加速np.take吗

这是我的尝试,但速度要慢得多。我不能使用nopython模式,因为它不喜欢np.empty_-like命令

import numba
import numpy as np
from timer import Timer    

def take( x, indices ):
    result = np.empty_like( indices, dtype=x.dtype )    
    for i in range( len( indices ) ):
        result[i] = x[ indices[ i ] ]
    return result

jtake = numba.jit("f4[:](f4[:],i4[:])" )( take )

if __name__=='__main__':

    N = 100000
    m = 100
    idx = np.random.random_integers( 0, N, m )
    x = np.random.randn( N )

    num_tests=10000

    with Timer( 'take' ):
        for i in range( num_tests ):    
            r0 = take( x, idx )

    with Timer( 'Numba take' ):
        for i in range( num_tests ):    
            r1 = jtake( x, idx )                

    with Timer( 'Numpy.take' ):
        for i in range( num_tests ):
            r2 = x.take( idx )
其结果是:

Beginning take
take took 2.46 seconds
Beginning Numba take
Numba take took 1.11 seconds
Beginning Numpy.take
Numpy.take took 0.04 seconds
答案是否定的

Numba不会对编译后的函数(如
np.take()
)或使用奇特索引的数组方法(这是算法的基础)执行操作。Numba作用于代码的解释部分

您的
take()
函数可能比NumPy的开销更大,并且Numba改进了for循环(解释)


使用NumPy>1.9,您的代码应该更接近NumPy的take,因为您的算法基于奇特的索引,并且达到了
np.take()

“使用numba是否可以加快np.take?”我怀疑您是否可以。