在我的MacBook专业版上运行以下代码后,我发现python3 numpy.fft.fft比python2更快:
import random
import time
# import matplotlib
import numpy as np
from scipy.fftpack import fft
# import cv2
coordinate = np.ndarray((1920, 1080, 2))
print(coordinate.shape)
for i in range(1920):
for j in range(1080):
coordinate[i][j] = (random.randint(0, 1920), random.randint(0, 1080))
print(coordinate[0][0])
# test = ([2.+4.j, 3.+3.j, 4.+4.j, 5.+3.j, 4.+2.j, 3.+1.j, 2.+2.j, 1.+3.j])
start_time = time.time();
res = np.fft.fft(coordinate)
end_time = time.time();
print("spend time: ", (end_time - start_time));结果是:
% python2 ./test.py
(1920, 1080, 2)
[ 1022. 435.]
('spend time: ', 0.06316184997558594)
% python3 ./test.py
(1920, 1080, 2)
[1143. 678.]
spend time: 0.18218493461608887蟒蛇的numpy版本都是1.19.1
Python2: 2.7.16
Python3: 3.7.3
为什么python2比python3快?
发布于 2020-08-19 21:17:04
我对你的测试做了一点修改,我想这会改变你的结论。修改后的代码如下:
import random
import time
# import matplotlib
import numpy as np
from scipy.fftpack import fft
# import cv2
np.random.seed(1234)
first = np.random.randint(0, 1920, (1920, 1080))
second = np.random.randint(0, 1080, (1920, 1080))
coordinate = np.dstack((first, second))
print(coordinate.shape)
print(coordinate[0][0])
start_time = time.time();
for i in range(100):
res = np.fft.fft(coordinate)
end_time = time.time();
print("spend time: ", (end_time - start_time)/100);首先,我让ftt函数在循环中运行100次,以获得更好的平均值。其次,我对所有测试使用相同的种子,因此结果数组coordinate对于所有测试都是相同的。
第三个更改不会影响测试,它只是创建coordinate数组的一种更快的方法。
我使用python2和python3多次运行测试(不是在我的机器上,但我使用了repl.it),我的结论是实际上没有太大区别。就我而言,经常使用python3测试比使用python2更快。
发布于 2020-08-25 15:11:19
我把这个问题作为一个问题发布在GitHub上:https://github.com/numpy/numpy/issues/17130
https://stackoverflow.com/questions/63486650
复制相似问题