下面的代码重现我在遇到算法我目前正在实施的问题:为什么迭代元素数组乘法在numpy中减速?
import numpy.random as rand
import time
x = rand.normal(size=(300,50000))
y = rand.normal(size=(300,50000))
for i in range(1000):
t0 = time.time()
y *= x
print "%.4f" % (time.time()-t0)
y /= y.max() #to prevent overflows
的问题是,在一些数量的迭代,事情开始变得逐渐变慢,直到一个迭代需要多次多时间比最初。
放缓 由Python过程
CPU占用率的曲线是稳定在17%-18%的全部时间。
我使用:
- 的Python 2.7.4的32位版本;
- Numpy 1.7.1 with MKL;
- Windows 8的
我不认为我看到Linux下的python-2.7.4此行为。 –
这可能是由于denormal数字:http://stackoverflow.com/a/9314926/226621 –
在我的测试运行中,只要它开始放缓,我打断它,并打印numpy.amin(numpy.abs( y [y!= 0]))'并且得到了'4.9406564584124654e-324',所以我认为反常数是你的答案。我不知道如何从Python内部刷新denormals为零,除了创建一个C扩展,虽然... –