生成对应于循环值的矩阵
generating matrices that correspond to the loop value
我的目标是评估输出相同结果的两个不同函数之间的执行时间。我正在查看 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 的空列表中。
现在,我的代码只计算执行时间的总和。而我想花每个循环的时间并附加到我指定的列表中。
我需要更改什么才能评估每个循环的时间并将该循环的时间附加到列表中,这样我就可以看到时间随着矩阵变大而变化,然后绘制数据进行比较?
谢谢
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))
你可以有一个时间列表:
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 绑定程序开始 运行 与你的低持续时间循环同时停止在高持续时间循环之前。在这种情况下,时间比较将不准确。
谢谢 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()
我的目标是评估输出相同结果的两个不同函数之间的执行时间。我正在查看 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 的空列表中。
现在,我的代码只计算执行时间的总和。而我想花每个循环的时间并附加到我指定的列表中。
我需要更改什么才能评估每个循环的时间并将该循环的时间附加到列表中,这样我就可以看到时间随着矩阵变大而变化,然后绘制数据进行比较?
谢谢
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))
你可以有一个时间列表:
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 绑定程序开始 运行 与你的低持续时间循环同时停止在高持续时间循环之前。在这种情况下,时间比较将不准确。
谢谢 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()