列表理解用0替换数组中的前n项

时间:2018-05-08 21:27:09

标签: python numba

我正在写一个jitted函数来用多维数组中的前N个元素替换0.我会做很多次,所以速度很重要。 @njit显着加快了速度,但我想知道是否有办法摆脱使用列表理解的for循环。这有助于提高效率吗?有什么建议吗?

 import numpy as np
 from numba import njit

 lengths=np.random.randint(0,365, size=20)

 @njit
 def availarray(lengths):
     out=1+np.zeros((365, len(lengths)))
     for i in range(int(len(lengths))):
         out[:int(lengths[i]), i]=0*int(lengths[i])
     return out

1 个答案:

答案 0 :(得分:1)

总结:摆脱对intlen的所有来电;摆脱乘以0;有效地生成原始数组。

def availarray(lengths):
    out = np.ones((365, lengths.size))
    for i in range(lengths.size):
        out[:lengths[i], i] = 0
    return out

这将执行时间从49 mks减少到31.7 mks。

从一个零数组开始并用1填充它会更好:

def availarray(lengths):
    out = np.zeros((365, lengths.size))
    for i in range(lengths.size):
        out[lengths[i]:, i] = 1
    return out

在我的情况下,这进一步将执行时间减少到26.3 mks,加速46%。