我想采用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(即使在这种情况下阵列中没有零)也要贵得多。如果我们查看稀疏数组,这显然是不同的,但即使在非稀疏情况下,是否有更有效的方法来避免零?