আইপথন নোটবুকে ঘর নির্বাহের সময় পরিমাপ করার সহজ উপায়


181

আমি সেল থেকে আসল আউটপুট ছাড়াও সেল এক্সিকিউশনে ব্যয় করা সময় পেতে চাই।

এই লক্ষ্যে, আমি চেষ্টা করেছি %%timeit -r1 -n1কিন্তু এটি ঘরের মধ্যে সংজ্ঞাযুক্ত পরিবর্তনশীলটি প্রকাশ করে না।

%%time সেলটির জন্য কাজ করে যার মধ্যে কেবল 1 টি স্টেটমেন্ট রয়েছে।

In[1]: %%time
       1
CPU times: user 4 µs, sys: 0 ns, total: 4 µs
Wall time: 5.96 µs
Out[1]: 1

In[2]: %%time
       # Notice there is no out result in this case.
       x = 1
       x
CPU times: user 3 µs, sys: 0 ns, total: 3 µs
Wall time: 5.96 µs

এটি করার সর্বোত্তম উপায় কী?

হালনাগাদ

আমি বেশ কিছুদিন ধরে এনবেক্সটেনশনে এক্সিকিউট টাইম ব্যবহার করছি। বেশ ভালো.


3
আপনি কি সত্যিই মূল্য প্রদর্শন সময় প্রয়োজন? কেন শুধু xপরবর্তী লাইনে ডিসপ্লে লাইন রাখবেন না?
dbliss

উত্তর মেনে নিচ্ছেন না কেন?
রাত্রিড়ু

উত্তর:


46

ফিলিপ ক্লাউড দ্বারা গিথুবে সেল যাদু এবং এই প্রকল্পটি ব্যবহার করুন:

এটি আপনার নোটবুকের শীর্ষে রেখে এটিকে লোড করুন বা যদি আপনি সর্বদা ডিফল্টরূপে এটি লোড করতে চান তবে:

%install_ext https://raw.github.com/cpcloud/ipython-autotime/master/autotime.py
%load_ext autotime

যদি লোড করা হয়, পরবর্তী কক্ষের কার্যকরকরণের প্রতিটি আউটপুট মিনিট এবং সেকেন্ডের মধ্যে সময়টি অন্তর্ভুক্ত করে এটি কার্যকর করতে সময় নেয়।


15
এটি আর কাজ করে না, যেহেতু% ইনস্টল_সেক্সট হ্রাস করা হয়। বিকল্প আছে?
চক্ষু অ্যাপ্লিকেশনগুলি এলএলসি

13
এই সমস্যাটি সম্বোধন করার জন্য একটি পুল অনুরোধ রয়েছে ( github.com/cpcloud/ipython-autotime/pull/5 ) তারপরে আপনি চেষ্টা করতে পারেনpip install ipython-autotime
x0s

13
%%timeশেষ বিবৃতিটি না থাকলেও এখন কাজ করে print
rp00

439

এই সমস্যাটি কাটিয়ে ওঠার একমাত্র উপায় হ'ল প্রিন্ট সহ শেষ বিবৃতিটি কার্যকর করা।

ভুলে যাবেন না যে সেল যাদুটি শুরু হয় %%এবং লাইন যাদুটি শুরু হয় %

%%time
clf = tree.DecisionTreeRegressor().fit(X_train, y_train)
res = clf.predict(X_test)
print(res)

লক্ষ্য করুন যে কক্ষের অভ্যন্তরীণ যে কোনও পরিবর্তনগুলি পরবর্তী কোষগুলিতে বিবেচনা করা হয় না, এমন কোনও জিনিস যা পাইপলাইন উপস্থিত থাকলে স্বতঃস্ফূর্ত হয়: একটি উদাহরণ


4
@ Rp00 উপরে উল্লিখিত হিসাবে, শেষ বিবৃতিটি মুদ্রণ না করা সত্ত্বেও এখন %% সময় কাজ করে।
নীলামকবি

1
ডিসপ্লে (রেজোলিউশন) এছাড়াও কাজ করে এবং একটি পান্ডাস ডেটা ফ্রেম বা স্টাইলাইজড আউটপুট প্রয়োজন এমন অন্য কিছু প্রদর্শন করার চেষ্টা করার সময় এটি পছন্দসই সমাধান।
dshefman

@ ডিশেফম্যান হ্যাঁ এটি সঠিক এবং এটি ডেটাব্রিক্স / স্পার্ক নোটবুকগুলির পক্ষে খুব সহজে বহনযোগ্য।
টেকনাজী

এটা একটা সমস্যা যখন আমরা 1 ম সেল বাস্তবায়ন নয় %%timeএবং a=1কিন্তু 2nd সেল জানে না কী aহয়?
জেসন

3
অবগতির জন্য। আমি দেখতে পেয়েছি যে পরীক্ষিত কক্ষের পরিবর্তনশীলগুলি এখন পরবর্তী কোষগুলিতে বিবেচনা করা হবে। (20/02/2020) - ফি
ফি ইয়াও


43

একটি সহজ উপায় jupyter_contrib_nbextensions প্যাকেজে এক্সিকিউটিটাইম প্লাগইন ব্যবহার করা।

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable execute_time/ExecuteTime

5
এটি সবচেয়ে আন্ডাররেটেড উত্তর!
ডেভের

1
উত্তরের সমুদ্র কারো কাছে ডাইভিংয়ের জন্য: এই একটাই, কেবল এটি ইনস্টল করুন এবং তারপরে আপনি প্রতিটি কক্ষে একটি কার্যকর বিন্যাসে মৃত্যুর সময় দেখতে পাবেন
এল পোচো লা প্যান্টেরা

14

আমি কেবল %%timeঘরের শুরুতে যুক্ত করে সময় পেলাম। আপনি একইটি জুপিটার স্পার্ক ক্লাস্টার / ভার্চুয়াল পরিবেশে ব্যবহার করতে পারেন। %%timeসেলের শীর্ষে কেবল যুক্ত করুন এবং আপনি আউটপুট পাবেন। জুপিটার ব্যবহার করে স্পার্ক ক্লাস্টারে, আমি ঘরের শীর্ষে যুক্ত হয়েছি এবং আমি নীচের মতো আউটপুট পেয়েছি: -

[1]  %%time
     import pandas as pd
     from pyspark.ml import Pipeline
     from pyspark.ml.classification import LogisticRegression
     import numpy as np
     .... code ....

Output :-

CPU times: user 59.8 s, sys: 4.97 s, total: 1min 4s
Wall time: 1min 18s

এটি সেল কোডটি একটি ডিফল্ট নং কার্যকর করে। বার এবং তারপর গড় লাগে? এবং 'সেটআপ কোড' হিসাবে প্রথম বিবৃতি সম্পর্কে কি?
amsquareb

12
import time
start = time.time()
"the code you want to test stays here"
end = time.time()
print(end - start)


9

এটি হুবহু সুন্দর নয় তবে অতিরিক্ত সফটওয়্যার ছাড়াই

class timeit():
    from datetime import datetime
    def __enter__(self):
        self.tic = self.datetime.now()
    def __exit__(self, *args, **kwargs):
        print('runtime: {}'.format(self.datetime.now() - self.tic))

তারপরে আপনি এটি চালাতে পারেন:

with timeit():
    # your code, e.g., 
    print(sum(range(int(1e7))))

% 49999995000000
% runtime: 0:00:00.338492

7

কখনও কখনও ব্যবহারের সময় বিন্যাসটি কোনও ঘরে আলাদা হয় print(res)তবে জুপিটার / আইপথন একটি সহ আসে display। নীচে পান্ডা ব্যবহার করে বিন্যাসের পার্থক্যের একটি উদাহরণ দেখুন।

%%time
import pandas as pd 
from IPython.display import display

df = pd.DataFrame({"col0":{"a":0,"b":0}
              ,"col1":{"a":1,"b":1}
              ,"col2":{"a":2,"b":2}
             })

#compare the following
print(df)
display(df)

displayবিবৃতি ফর্ম্যাটিং সংরক্ষণ করতে পারেন। স্ক্রিনশট


এটি সেল কোডটি একটি ডিফল্ট নং কার্যকর করে। বার এবং তারপর গড় লাগে? এবং 'সেটআপ কোড' হিসাবে প্রথম বিবৃতি সম্পর্কে কি?
amsquareb

2

আপনি পাইথনের প্রোফাইলিং যাদু কমান্ডটিও দেখতে চাইতে পারেন %prunযা এরকম কিছু দেয় -

def sum_of_lists(N):
    total = 0
    for i in range(5):
        L = [j ^ (j >> i) for j in range(N)]
        total += sum(L)
    return total

তারপর

%prun sum_of_lists(1000000)

ফিরে আসবে

14 function calls in 0.714 seconds  

Ordered by: internal time      

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    5    0.599    0.120    0.599    0.120 <ipython-input-19>:4(<listcomp>)
    5    0.064    0.013    0.064    0.013 {built-in method sum}
    1    0.036    0.036    0.699    0.699 <ipython-input-19>:1(sum_of_lists)
    1    0.014    0.014    0.714    0.714 <string>:1(<module>)
    1    0.000    0.000    0.714    0.714 {built-in method exec}

কোডের বিশাল অংশগুলির সাথে কাজ করার সময় আমি এটি দরকারী মনে করি।


2

যখন সমস্যায় পড়েন তখন এর অর্থ কী:

?%timeit অথবা ??timeit

বিস্তারিত পেতে:

Usage, in line mode:
  %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement
or in cell mode:
  %%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code
  code
  code...

Time execution of a Python statement or expression using the timeit
module.  This function can be used both as a line and cell magic:

- In line mode you can time a single-line statement (though multiple
  ones can be chained with using semicolons).

- In cell mode, the statement in the first line is used as setup code
  (executed but not timed) and the body of the cell is timed.  The cell
  body has access to any variables created in the setup code.

1

আপনি যদি এখানে প্রাচীর ঘর সম্পাদনের সময় মুদ্রণ করতে চান তবে একটি কৌশল, ব্যবহার করুন

%%time
<--code goes here-->

তবে এখানে নিশ্চিত হয়ে নিন যে, %% সময়টি একটি যাদু ফাংশন, তাই এটি আপনার কোডের প্রথম লাইনে রাখুন

যদি আপনি এটি আপনার কোডের কিছু লাইন পরে রাখেন এটি আপনাকে ব্যবহারের ত্রুটি দেয় এবং কাজ করবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.