python - numpy argmax 和 sort 函数的时间比较
问题描述
我试图在numpy中找到二维矩阵的最大列和的列。例如:
令 A = [[1, 2, 3], [0, 1, 4], [0, 0, 1]]
每列的总和为 [1, 3, 8]。因此,第 3 列具有最大列总和。
在尝试 numpy.argmax 和 numpy.sort 函数来完成此任务时,我期望 argmax 比理想情况下的排序更快,但它们导致相同的运行时间。
a = np.random.rand(7000, 8000)
start_time = time.time()
for i in range(1000):
np.sort(np.sum(a, axis = 0))
print(time.time() - start_time)
上面的代码在 33.29 秒内运行,而下面的代码也在 34.33 秒内运行。
a = np.random.rand(7000, 8000)
start_time = time.time()
for i in range(1000):
np.argmax(np.sum(a, axis=0))
print(time.time() - start_time)
您能否让我知道这背后的潜在原因?这与我如何解决问题有关吗?
解决方案
使用 timeit 模块计时。
>>> from timeit import Timer
>>> import numpy as np
>>> a = np.random.random((7000,8000))
>>> loops = 3
>>> timer = Timer("np.sum(a, axis=0)", "from __main__ import a, np")
>>> timer.timeit(loops) / loops
0.10155341827648574
>>> timer = Timer("np.argmax(a)", "from __main__ import a, np")
>>> timer.timeit(loops) / loops
0.11956859843814982
>>> timer = Timer("np.sort(a)", "from __main__ import a, np")
>>> timer.timeit(loops) / loops
3.5973468146321466
>>> timer = Timer("np.sort(np.sum(a, axis=0))", "from __main__ import a, np")
>>> timer.timeit(loops) / loops
0.09826639265653132
>>> timer = Timer("np.argmax(np.sum(a, axis=0))", "from __main__ import a, np")
>>> timer.timeit(loops) / loops
0.09442937388683958
>>>
推荐阅读
- iis - 如何修复从 https//www 到 https//non-www 版本的网站的重定向?
- java - java编译错误:方法内部的方法
- javascript - 为什么连接和排序方法表现得很奇怪?2 本质上相同的方式不会以相同的方式工作
- python - 绘制连接时间序列中大多数数据点的线
- javascript - 如何将可折叠表单添加到 PHP 代码中的编辑按钮?我尝试了一些东西,但没有用
- python-3.x - 从从发布请求收到的 iframe 响应中解析 src 链接
- c++ - 打印数组中非连续元素的最大和的解
- r - 定义具有常数数值的矩阵
- python - 绘制两个系列数据
- python - 了解返回语句中的打印