Mat*_*w K 5 python performance numpy time-complexity
我关心以下函数的速度:
def cch(tau):
return np.sum(abs(-1*np.diff(cartprod)-tau)<0.001)
Run Code Online (Sandbox Code Playgroud)
"cartprod"如下所示的列表的变量在哪里:
cartprod = np.ndarray([[0.0123,0.0123],[0.0123,0.0459],...])
Run Code Online (Sandbox Code Playgroud)
这份名单的长度约为2500万。基本上,我试图找到一种显着更快的方法来返回该中每个对列表的差异列表np.ndarray。是否有比 更快的算法方式或函数np.diff?或者,np.diff结局就是一切?我也对其他任何事情持开放态度。
编辑:谢谢大家的解决方案!
小智 4
我认为你通过重复返回多个长度约为 2500 万的 np.arrays 来碰壁,而不是 np.diff 很慢。我编写了一个等效的函数,它迭代数组并在数组运行过程中计算结果。该函数需要使用 numba 进行抖动才能快速运行。我希望这是可以接受的。
\n\narr = np.random.rand(25000000, 2)\n\ndef cch(tau, cartprod):\n return np.sum(abs(-1*np.diff(cartprod)-tau)<0.001)\n%timeit cch(0.01, arr)\n\n@jit(nopython=True)\ndef cch_jit(tau, cartprod):\n count = 0\n tau = -tau\n for i in range(cartprod.shape[0]):\n count += np.less(np.abs(tau - (cartprod[i, 1]- cartprod[i, 0])), 0.001)\n return count\n%timeit cch_jit(0.01, arr)\nRun Code Online (Sandbox Code Playgroud)\n\n产生
\n\n294 ms \xc2\xb1 2.82 ms \n42.7 ms \xc2\xb1 483 \xc2\xb5s \nRun Code Online (Sandbox Code Playgroud)\n\n大约快 6 倍。
\n| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |