唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

IPythonを使い始めました

今更ながらIPythonを使い始めました。
IPythonはPython用のインタラクティブシェルで、標準のものとは違って補完機能や自動インデント、シェルコマンドの実行などの色々と便利な機能がついています。
並列処理にも使えるみたいですが、その辺りはまだ調べていません。

インストール

他のライブラリと同様にpipなどでインストールできます。

pip install ipython

ちなみにWindows 7 64 bit でも上のコマンドで大丈夫でした。

便利な機能

IPythonのドキュメントを見るとたくさん書いてあって読み切れていないんですが、いくつか便利そうだと思った機能を紹介しておきます

ヘルプ

?

%quickref

と打つとIPythonの説明が読めます。後者のほうがわかりやすいです
%で始まるコマンドはマジックコマンドという機能で、

%magic

と打つとそれぞれの詳しい説明が読めます。
ちなみに先頭の%がなくても動きます

補完機能

モジュール名や関数名、変数名の入力途中でタブキーを押すだけです

履歴

途中まで打ってからCtrl+p, Ctrl+nや↑↓で、その文字列から始まる履歴のコマンドをたどれます。
またCtrl+rで履歴からの検索ができます
他にも入出力結果の履歴も保存されています

コードの貼り付け

%paste

をするとクリップボードからペーストされて、コマンドが実行されます

また以下のように>>>などを先頭に含むコードでもIPythonではそのまま動きます

>>> for i in xrange(10):
...     print i

オートインデント

forなどでインデントしたときに、それ以降もインデントが続きます

オブジェクトの説明を見る

オブジェクト名の後に?で説明、??でソースコードまで見れます(見れるものなら)

例えば組み込み関数のsumに対して

sum?

とすると

Type:       builtin_function_or_method
String Form:<built-in function sum>
Namespace:  Python builtin
Docstring:
sum(sequence[, start]) -> value

Returns the sum of a sequence of numbers (NOT strings) plus the value
of parameter 'start' (which defaults to 0).  When the sequence is
empty, returns start.

のような出力が得られます。

また?でマジックコマンドの説明も見れます

マジックコマンド名?

処理時間の計測

%timeit

%time

を使うと処理時間の計測ができます。

例えば

%timeit sum(xrange(1, 10000000))

と打つと

1 loops, best of 3: 669 ms per loop

と表示されます。
ループ数などは'-r 5'などとすると指定出来ます。

同様に

%time sum(xrange(1, 10000000))

とすると以下のような結果が得られます

CPU times: user 0.73 s, sys: 0.00 s, total: 0.73 s
Wall time: 0.73 s

シェルコマンドの実行

!の後にコマンドを打つとシェルコマンドが実行出来ます。

!ping localhost

またコマンドの実行結果を変数に代入できます

result = !ls

ログ

%logstart ファイル名

でファイル名へのログの保存を開始して

%logstop

で終了します。
インタラクティブシェルで実行したコマンドが記録されます。

変数一覧の表示

%whos

エディタの利用

インタラクティブシェルの途中でエディタを使って編集ができます。
ただし一時ファイルを利用しているので、もしも保存したいときには一手間かかります。
また利用するエディタは変更できます。

%edit