python - Python3 numpy.fft.fft() 与 Python2 numpy.fft.fft()
问题描述
在我的 MacBook Pro 上运行以下代码后,我发现 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
python的numpy版本都是1.19.1
Python2:2.7.16
Python3:3.7.3
为什么python2比python3快?
解决方案
我稍微修改了你的测试,我认为这会改变结论。这是修改后的代码:
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 更快。
推荐阅读
- react-native - 试图在本机反应中将图像数据传递到另一个屏幕
- docusignapi - 调整 Docusign 的标志此处选项卡的大小
- ios - applicationDidEnterBackground 中的应用程序时未调用 applicationWillTerminate
- docker - Docker swarm 路由重定向不起作用
- excel - 宏需要很长时间才能循环近 700 行
- php - 附件文件未显示在电子邮件收件箱 php 邮件中
- sql-server - 如何从数据库中获取今天日期前30天的日期
- swift - TabView 选择在 SwiftUi Playground 中不起作用
- laravel - Laravel json键与函数类名冲突使用
- express - 您可以从 expressJS 后端设置客户端授权标头吗?