【发布时间】:2018-01-19 14:21:34
【问题描述】:
假设我有以下numpy array
n = 50
a = np.array(range(1, 1000)) / 1000.
我想执行这行代码
%timeit v = [a ** k for k in range(0, n)]
1000 loops, best of 3: 2.01 ms per loop
但是,这行代码最终会循环执行,所以我遇到了性能问题。
有没有办法优化循环?例如,列表推导式中特定计算i的结果就是循环中之前的计算结果,再乘以a。
我不介意将结果存储在二维数组而不是列表中的数组中。那可能会更干净。顺便说一句,我也尝试了以下方法,但它产生了类似的性能结果:
k = np.array(range(0, n))
ones = np.ones(n)
temp = np.outer(a, ones)
然后进行如下计算
%timeit temp ** k
1000 loops, best of 3: 1.96 ms per loop
或
%timeit np.power(temp, k)
1000 loops, best of 3: 1.92 ms per loop
但两者都产生与上述列表理解相似的结果。顺便说一句,在我的情况下,n 将永远是 integer。
【问题讨论】:
标签: loops numpy exponential exponent