我试图在numpy中找到具有2D矩阵的最大列和的列。 例如:
让A = [[1、2、3],[0、1、4],[0、0、1]]
每列的总和为[1、3、8]。因此,第三列的列总和最大。
虽然尝试使用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)
能否让我知道背后的潜在原因?与我解决问题的方式有关吗?
答案 0 :(得分:1)
使用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
>>>