下面的代碼重現我在遇到算法我目前正在實施的問題:爲什麼迭代元素數組乘法在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擴展,雖然... –