LoginSignup
3

More than 5 years have passed since last update.

AnacondaのSpyderでspyder_line_profilerを使用して実行時間の解析

Posted at

この記事は

Pythonのパッケージ管理ツールにAnacondaがあります.
このAnacondaではPythonの統合開発環境,Spyderが提供されています.
本記事ではSpyderでプラグインで利用できる"spyder-line-profiler"の使い方を簡単にまとめます.
image.png
https://github.com/spyder-ide/spyder-line-profiler

実行環境

  • Ubuntu 16.04
  • Python 3.5.4
  • Anaconda 1.6.6
  • Spyder 3.2.4

インストール

Anaconda

以下のようなサイトを参考にして,Anacondaを利用したPython環境の構築を行います.

spyder-line_profiler

本家githubにあるように,condaコマンドもしくはpipコマンドでインストールします.

# conda
$ conda install -c spyder-ide spyder-line-profiler
# or pip
$ pip install spyder-line-profiler

pipの方があっさり.

実行例

今回は以下のtest_profile.pyの実行時間を計測します.
100x100のarrayの和を計算する2つの関数(func1, func2)を使用します.
ポイントはプロファイリングしたい関数の前に@profileと書き加えることです.

test_profile.py
import numpy as np

@profile
def func1(hoge):
    s = 0
    for i in range(hoge.shape[0]):
        for j in range(hoge.shape[1]):
            s += hoge[i, j]
    print(s)

@profile
def func2(hoge):
    print(hoge.sum())

@profile
def main():
    a = np.ones((100, 100))

    func1(a)
    func2(a)

if __name__ == "__main__":
    main()

このファイルをspyder上で開き,ツールバーの[実行]->[Profile line by line]をクリックすることでプロファイリングできます.
プロファイリングが終了すると,以下のスクリーンショットのようなタブが現れます.([ヘルプ]や[変数エクスプローラー]タブの隣に)
プロファイリング結果は,ホームディレクトリ下の.config/spyder-py3/lineprofiler.resultsに保存されるようです.
Screenshot from 2018-09-08 18-48-56.png
それぞれの列は,

  • Line:行
  • Hits:呼び出された回数
  • Time:その行の総実行時間 (ms)
  • Per hit:1回当たりの実行時間 (ms)
  • % Time:その行の実行時間が,関数の実行時間に占める割合

% Timeによって行が色付けされていて,視覚的にも分かりやすい.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3