首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用numba加速拍摄?

用numba加速拍摄?
EN

Stack Overflow用户
提问于 2014-11-14 15:04:11
回答 1查看 355关注 0票数 3

有没有可能使用numba来加速np.take?

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

代码语言:javascript
复制
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 )

它有以下结果:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-11-14 22:37:20

答案是否定的。

Numba不会作用于编译后的函数,如np.take()或使用花式索引的数组方法,而花式索引是算法的基础。Numba作用于代码的解释部分。

你的take()函数可能比NumPy函数有更多的开销,Numba改进了for循环(解释的)。

当NumPy >1.9时,你的代码应该更接近于NumPy,因为你的算法是基于奇特的索引和np.take()级别的they improved the fancy indexing efficiency

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26924677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档