2024-06-13 13:22:32 发布
网友
我关心的是以下函数的速度:
def cch(tau): return np.sum(abs(-1*np.diff(cartprod)-tau)<0.001)
其中,"cartprod"是列表的变量,如下所示:
"cartprod"
这份名单的长度约为2500万。基本上,我试图找到一种更快速的方法来返回np.ndarray中每个对列表的差异列表。有没有比np.diff更快的算法或函数?或者,是np.diff结束都是全部吗?我也愿意接受其他任何事情。在
np.ndarray
np.diff
编辑:谢谢大家的解决方案!在
在array-slicing-
array-slicing
import numexpr as ne def cch_numexpr(a, tau): d = {'a0':a[:,0],'a1':a[:,1]} return np.count_nonzero(ne.evaluate('abs(a0-a1-tau)<0.001',d))
对25M大小的数据进行采样运行和计时-
25M
大约6x加速。在
6x
这是使用8线程的。因此,随着可用于计算的线程数量的增加,它应该得到进一步的改进。^{}介绍如何控制多核功能。在
8
我认为你重复返回多个np.数组长度约为2500万而不是np.差异慢一点。我写了一个等价的函数,它在数组上迭代,并在执行过程中计算结果。这个功能需要用numba进行抖动才能快速完成。我希望这是可以接受的。在
arr = np.random.rand(25000000, 2) def cch(tau, cartprod): return np.sum(abs(-1*np.diff(cartprod)-tau)<0.001) %timeit cch(0.01, arr) @jit(nopython=True) def cch_jit(tau, cartprod): count = 0 tau = -tau for i in range(cartprod.shape[0]): count += np.less(np.abs(tau - (cartprod[i, 1]- cartprod[i, 0])), 0.001) return count %timeit cch_jit(0.01, arr)
生产
大约快6倍。在
出于好奇,我比较了@Divakarnumexpr和@alexdornumba.jit的解。实现numexpr.evaluate的速度似乎是使用numba的jit编译器的两倍。每100次测试的结果如下:
numexpr.evaluate
numba
np.sum: 111.07543396949768 numexpr: 12.282189846038818 JIT: 6.2505223751068115 'np.sum' returns same result as 'numexpr' 'np.sum' returns same result as 'jit' 'numexpr' returns same result as 'jit'
编写脚本,以便重现结果:
在
array-slicing
-对
^{pr2}$25M
大小的数据进行采样运行和计时-大约
6x
加速。在这是使用} 介绍如何控制多核功能。在
8
线程的。因此,随着可用于计算的线程数量的增加,它应该得到进一步的改进。^{我认为你重复返回多个np.数组长度约为2500万而不是np.差异慢一点。我写了一个等价的函数,它在数组上迭代,并在执行过程中计算结果。这个功能需要用numba进行抖动才能快速完成。我希望这是可以接受的。在
生产
^{pr2}$大约快6倍。在
出于好奇,我比较了@Divakarnumexpr和@alexdornumba.jit的解。实现
numexpr.evaluate
的速度似乎是使用numba
的jit编译器的两倍。每100次测试的结果如下:编写脚本,以便重现结果:
^{pr2}$相关问题 更多 >
编程相关推荐