numpy argmax 和 sort 函数的时间比较

Time comparison of numpy argmax and sort functions

我试图在 numpy 中找到二维矩阵的列总和最大的列。 例如:

令 A = [[1, 2, 3], [0, 1, 4], [0, 0, 1]]

每一列的总和是[1, 3, 8]。因此,第 3 列具有最大列和。

在尝试 numpy.argmax 和 numpy.sort 函数来完成此任务时,我期望 argmax 比理想情况下的 sort 更快,但它们导致相同的 运行 时间

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
>>>