Как правильно просмотреть сроки выполнения - PullRequest
0 голосов
/ 07 октября 2019

Я был на этом вопросе и думал, что график времени, на который был дан верхний ответ, прекрасен. Я часто нахожусь в любопытстве по поводу времени вычислений во время моей работы и решил сделать что-то похожее.

def check_timing(operations):
    res = []

    for operation in operations:
        code = compile(operation, '', 'eval')
        timeit_result = %timeit -o -q eval(code) 
        times = np.array(timeit_result.all_runs)
        res.append([times.mean(), times.std()])

    return np.array(res)

operations = ['len(df.index)', 'df.shape']
times_list = [[], []]
sizes = [10, 100, 1000, 10000, 100000]
for s in sizes:
    df = pd.DataFrame(np.arange(s*3).reshape(s,3))
    times = check_timing(operations)
    for i in range(len(operations)):
        times_list[i].append(times[i])

times_list = np.array(times_list)

for i in range(len(operations)):
    data = times_list[i]
    y_val = data.T[0]
    y_err = data.T[1]
    plt.errorbar(sizes, y_val, yerr=y_err,
                 label=f'operations[{i}]')

plt.ylabel('microseconds per loop')
plt.xscale('log')
plt.legend()
plt.show()

Мои комментарии до сих пор таковы, что, во-первых, нигде нельзя сопоставить связанный вопрос. Это можно проверить, запустив, например, timeit df.shape или timeit len(df.index) для любого размера. Я полагаю, что это в значительной степени связано с накладными расходами, вызванными вычислением eval(code) (а не просто 'code'). Во-вторых, кажется, что TimeitResult несовместим с выходными единицами времени. Кто-нибудь знает лучший способ пойти по этому поводу и / или есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...