记录numpy数组但忽略0的最有效方法

时间:2018-01-13 00:22:41

标签: python performance numpy vectorization logarithm

我想采用numpy数组的自然对数,但根本不计算0条目的对数。即我想在numpy数组上实现约定log(0)= 0。

import numpy as np
import timeit
foo = np.random.rand(500)
%timeit np.log(foo)
%timeit np.log(foo,where=foo>0)

对于第一次调用,这会产生

  

最慢的跑步比最快跑的时间长12.63倍。这可以   表示正在缓存中间结果。 100000循环,最好的   3:每循环2.06μs

对于第二个电话,我们得到

  

最慢的跑步时间长了8.35倍   最快的。这可能意味着正在缓存中间结果。   100000次循环,最佳3次:每循环4.31μs

因此,避免使用0(即使在这种情况下阵列中没有零)也要贵得多。如果我们查看稀疏数组,这显然是不同的,但即使在非稀疏情况下,是否有更有效的方法来避免零?

0 个答案:

没有答案