Я был на этом вопросе и думал, что график времени, на который был дан верхний ответ, прекрасен. Я часто нахожусь в любопытстве по поводу времени вычислений во время моей работы и решил сделать что-то похожее.
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 несовместим с выходными единицами времени. Кто-нибудь знает лучший способ пойти по этому поводу и / или есть предложения?