日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 默认站点!

默认站点

當前位置: 首頁 >

时间统计%time和%timeit_python

發布時間:2023/11/28 31 豆豆
默认站点 收集整理的這篇文章主要介紹了 时间统计%time和%timeit_python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

202170713

https://blog.csdn.net/a18852867035/article/details/82257682

python計算時間的兩種方式:time與datetime

https://www.cnblogs.com/adamans/articles/14121126.html

裝飾器實現

對于規模更大、運行時間更長的數據分析應用程序,你可能會希望測試一下各個部分或函數調用或語句的執行時間。你可能會希望了解某個復雜計算過程中到底是哪些函數占用的時間最多。幸運的是,在開發和測試代碼的過程中,IPython能夠讓你輕松得到這些信息。使用內置的time模塊及其time.clock和time.time函數手工測試代碼執行時間是一件令人煩悶的事情,因為你必須編寫許多一模一樣的了無生趣的公式化代碼:

  1. import time
  2. start = time.time()
  3. for i in range(iterations):
  4. # 這里放一些待執行的代碼
  5. elapsed_per = (time.time() - start) / iterations

由于這是一個非常常用的功能,所以IPython專門提供了兩個魔術函數(%time和%timeit)以便自動完成該過程。%time一次執行一條語句,然后報告總體執行時間。假設我們有一大堆字符串,希望對幾個“能夠選出具有特殊前綴的字符串”的函數進行比較。下面是一個擁有60萬字符串的數組,以及兩個不同的“能夠選出其中以foo開頭的字符串”的方法:

  1. # 一個非常大的字符串數組
  2. strings = ['foo', 'foobar', 'baz', 'qux', 'python', 'Guido Van Rossum'] * 100000
  3. method1 = [x for x in strings if x.startswith('foo')]
  4. method2 = [x for x in strings if x[:3] == 'foo']

看上去它們的性能表現應該差不多,對吧?我們通過%time來確認一下:

  1. In [561]: %time method1 = [x for x in strings if x.startswith('foo')]
  2. CPU times: user 0.19 s, sys: 0.00 s, total: 0.19 s
  3. Wall time: 0.19 s
  4. In [562]: %time method2 = [x for x in strings if x[:3] == 'foo']
  5. CPU times: user 0.09 s, sys: 0.00 s, total: 0.09 s
  6. Wall time: 0.09 s

墻上時間(Wall time)是我們最感興趣的數字。所以,看上去第一個方法耗費了兩倍以上的時間,但這并不是一個非常精確的結果。如果你對相同語句多次執行%time的話,就會發現其結果是會變的。為了得到更為精確的結果,需要使用魔術函數%timeit。對于任意語句,它會自動多次執行以產生一個非常精確的平均執行時間。

  1. In [563]: %timeit [x for x in strings if x.startswith('foo')]
  2. 10 loops, best of 3: 159 ms per loop
  3. In [564]: %timeit [x for x in strings if x[:3] == 'foo']
  4. 10 loops, best of 3: 59.3 ms per loop

這個貌似平淡無奇的例子正好說明了一個事實:我們非常有必要了解Python標準庫、NumPy、pandas以及本書中所用到的其他庫的性能特點。在大型數據分析應用程序中,這些不起眼的毫秒數是會不斷累積的!

對于那些執行時間非常短(甚至是那些微秒(1e-6秒)或納秒(1e-9秒)級的)的分析語句和函數而言,%timeit是非常有用的。雖然這些時間值小到幾乎可以忽略不計,但同樣執行100萬次一個20微秒的函數,所用的時間要比一個5微秒的多15秒。在上面那個例子中,我們可以直接對那兩個字符串運算進行比較以了解其性能特點:

  1. In [565]: x = 'foobar'
  2. In [566]: y = 'foo'
  3. In [567]: %timeit x.startswith(y)
  4. 1000000 loops, best of 3: 267 ns per loop
  5. In [568]: %timeit x[:3] == y
  6. 10000000 loops, best of 3: 147 ns per loop

總結

以上是默认站点為你收集整理的时间统计%time和%timeit_python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得默认站点網站內容還不錯,歡迎將默认站点推薦給好友。