Chr*_*ris 5 python performance numpy logarithm vectorization
我想取一个 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)
Run Code Online (Sandbox Code Playgroud)
对于第一次调用,这会产生
最慢的运行时间比最快的运行时间长 12.63 倍。这可能意味着正在缓存中间结果。100000 个循环,最好的 3 个:每个循环 2.06 µs
对于第二次调用,我们得到
最慢的运行时间比最快的运行时间长 8.35 倍。这可能意味着正在缓存中间结果。100000 个循环,最好的 3 个:每个循环 4.31 µs
因此,避免使用 0(即使在这种情况下数组中没有零)的成本要高得多。如果我们查看稀疏数组,这显然是不同的,但是即使在非稀疏情况下,是否有更有效的方法来避免零?