生成与循环值相对应的矩阵

时间:2018-10-12 22:50:39

标签: python loops matrix time determinants

我的目标是评估输出相同结果的两个不同函数之间的执行时间。我正在查看np.linalg.det()和我制作的名为mydet()的函数。

对于每个循环,我想生成一个n x n矩阵,其中n在(2,9)范围内。之所以会是2,是因为不会少一个就不会是一个矩阵,而因为9会因为它更大而不会成为一个矩阵,所以执行时间会很长。

我希望n值对应于循环值i,所以n = i + 2?我从0开始,我需要n从2开始。

我想测量每个循环所花费的时间,并将其附加到分别称为my_det_time和np_det_time的空列表中。

现在,我的代码仅计算执行时间的总和。而我想花费每个循环的时间并将其附加到我指定的列表中。

为了评估每个循环的时间并将该循环的时间附加到列表中,我需要更改什么,以便我可以看到随着矩阵变大的时间变化,然后绘制数据进行比较? / p>

谢谢

import time 
start_time = time.time()
from random import randint

my_det_time = []
np_det_time = []

for i in range(8):
    n = i+2
    s = 10
    A = [[round(random.random()*s) for i in range(n)] for j in range(n)]
    np.linalg.det(A)


print("%s seconds" % (time.time() - start_time))

2 个答案:

答案 0 :(得分:1)

您可以列出时间列表:

exe_times = []
for i in range(8):
    start = time.time()
    n = i+2
    s = 10
    A = [[round(random.random()*s) for i in range(n)] for j in range(n)]
    np.linalg.det(A)
    end = time.time()
    exe_times.append(end-start)

但是请记住,这个时间就是所谓的挂钟时间,即从循环开始到循环结束所经过的全部时间。这不是CPU仅通过计算循环内的指令而完全消耗的时间。例如,如果与CPU绑定的程序在您的低时间周期循环开始的同时开始运行,而在高时间周期循环之前停止运行,则可能会出现问题。在这种情况下,时间比较将不准确。

答案 1 :(得分:0)

谢谢H. Tacon,这非常有帮助。

这是我想出的,我认为它可以完成我想要的一切。

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import time 
from random import randint

my_det_time = []
np_det_time = []

for i in range(8):
    start = time.time()
    n = i+2
    s = 10
    A = [[round(random.random()*s) for i in range(n)] for j in range(n)]
    mydet(A)
    end = time.time()
    my_det_time.append(end-start)

for i in range(8):
    start = time.time()
    n = i+2
    s = 10
    A = [[round(random.random()*s) for i in range(n)] for j in range(n)]
    np.linalg.det(A)
    end = time.time()
    np_det_time.append(end-start)

plt.plot([2,3,4,5,6,7,8,9], np_det_time, 'r', label='np.linalg.det')
plt.plot([2,3,4,5,6,7,8,9], my_det_time, 'g', label='mydet')
red_patch = mpatches.Patch(color='red', label='np.linalg.det')
green_patch = mpatches.Patch(color='green', label='mydet')
plt.legend(handles=[red_patch, green_patch])
plt.title('mydet() vs. np.linalg.det()')
plt.ylabel('Execution Time (sec)')
plt.xlabel('Matrix Size (n x n)')
plt.show()

mydet vs np.linalg.det