我正在编写一个jitted函数,用0替换多维数组中的前N个元素。我会做很多很多次,所以速度很重要。@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
总结一下:去掉对
int
和len
的所有调用;去掉0的乘法;高效地生成原始数组。你知道吗这将执行时间从49 mks缩短到31.7 mks。你知道吗
从零数组开始,用1填充,效果更好:
在我的例子中,这进一步将执行时间减少到26.3 mks,提高了46%。你知道吗
我使用以下方法将运行时间缩短了约30%:
您的版本:
此版本:
这可能只是随机长度选择的一个怪癖,但至少不使用
0*len(lengths[i])
,使用np.ones(...)
或np.zeros(...)
而不是1 + np.zeros(...)
是一个好的开始。你知道吗相关问题 更多 >
编程相关推荐