2016-10-25 4 views
0

Осмотрев форумы и кусочки и учебные пособия по использованию timeit, я не смог идентифицировать свою проблему, но я уверен, что у меня что-то не хватает.Python timeit из командной строки - большая часть функциональности внутри строки не синхронизирована

Я пытаюсь весело следующий фрагмент кода (слегка измененный, чтобы быть просто иллюстративный пример) через timeit к производительности времени:

PREDS=" 
import numpy as np 
from ML import fit, predict 
from utils.data_transform import features_squared_only 

red_features = np.load('data/red_features.npy') 
f_sq2r = features_squared_only(red_features) 
query_sn = np.load('data/query_sn.npy') 
q_sq2r = features_squared_only(query_sn) 
l4 = np.load('data/red_mlabels4.npy') 
W = fit(f_sq2r, l4) 
preds = predict(q_sq2r, W)" 

python -m timeit -v -s "PREDS" 

дает мне это:

10 loops -> 5.11e-06 secs 
100 loops -> 4.39e-06 secs 
1000 loops -> 1.27e-05 secs 
10000 loops -> 8.47e-05 secs 
100000 loops -> 0.000769 secs 
1000000 loops -> 0.00792 secs 
10000000 loops -> 0.0854 secs 
100000000 loops -> 0.804 secs 
raw times: 0.822 0.791 0.808 
100000000 loops, best of 3: 0.00791 usec per loop 

Однако , это определенно некорректно, поскольку даже:

python -m timeit -v -s "1+2" 

дает результаты, такие как

100000000 loops, best of 3: 0.00781 usec per loop 

Не говоря уже, когда я включил печати заявления в том, что «Preds» последовательность инструкций выше, он появился только в 8 раз (было также 10^8 «петли» - вероятно, связано). Измерение того же кода, за исключением импорта, заняло около 5 секунд времени настенных часов, поэтому в любом случае кажется маловероятным, что другие вызовы/и т. Д. который может быть исключен по времени, если он фактически рассчитан на весь код выше, составит до ~ 4,2 секунды.

Похоже, что большая часть моего кода на самом деле не синхронизирована/протестирована, но я не уверен, чего не хватает, чтобы заставить его работать. Любая помощь будет принята с благодарностью!

ответ

1

Опция -s не делает то, что вы думаете, что она делает; s означает настройку. Поэтому, видимо, вы только настраиваете свой таймер с помощью некоторого кода, но на самом деле вы не выбираете что-нибудь.

-s S, --setup=S

заявление будет выполняться один раз первоначально (по умолчанию передача)

Более того, с помощью "PREDS" как строка также не делать то, что вы ожидаете. Я предлагаю вам написать сценарий для этого и поместить в него логику, а не пытаться скрестить все в ваш терминал.

+0

Вы избили меня до него. Я вернулся к примеру, который, как я думал, я копировал, затем проверил документы и обнаружил, что я не использовал его правильно. – mediantis