генерация матриц, соответствующих значению цикла - PullRequest
0 голосов
/ 13 октября 2018

Моя цель - оценить время выполнения двух разных функций, которые выдают один и тот же результат.Я смотрю на np.linalg.det () и функцию, которую я сделал, называется mydet ().

Для каждого цикла я бы хотел сгенерировать матрицу тревожных сигналов с 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))

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Спасибо Х. Такон, это было чрезвычайно полезно.

Вот то, что я придумал, я думаю, что он делает все, что я хочу.

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

0 голосов
/ 13 октября 2018

Вы можете иметь список времен:

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)

Но имейте в виду, что это время называется временем настенных часов, т. Е. Полное время, прошедшее с начала цикла и до концапетли.На этот раз процессор не расходуется полностью, просто вычисляя инструкции внутри цикла.Это может быть проблемой, если, например, программа, связанная с процессором, запускается в то же время, что и ваш цикл с низкой длительностью, и останавливается до цикла с большой продолжительностью.В таком случае сравнение времени не будет точным.

...