JupyterNotebookの対話モードで、変数や式を複数行表示する


JupyterNotebookを使って、プログラムの実行結果を表示するには、print文を使う方法と式や変数を入力する方法があります。

print文を使う方法は、標準出力といわれており、次のように出力します。1つのセルでいくつもの出力ができます。

これに対し、式や変数をそのまま入力する方法があり、対話モード(インタラクティブシェル)での自動表示などと言われています。「ちょっと実行結果を見たい」という場合に"print"を入力する手間が省けるので便利です。ところが、対話モード(インタラクティブシェル)での自動表示では、1つのセルの中で、最後の結果しか表示してくれないという問題があります。

通常は、状況に合わせて使い分ければよいのですが、問題なのはSympyで数式を表示するときです。次の通り、標準出力でよりも対話モードでの自動表示の方がわかりやすく数式を表示してくれます。

そうすると、1つのセルで複数の対話モード(インタラクティブシェル)での自動表示ができるようにすることができると便利です。このためには、次のように入力して実行します。

インタラクティブシェルで変数や数式を複数行表示させる
from IPython import InteractiveShell
InteractiveShell.ast_node_interactivity = "all" 

JupyterNotebookはIPythonという対話型シェル上で動いており、IPythonではTerminal IPython optionsでいろいろな設定ができます。このうち、"ast_node_interactivity"パラメータでインタラクティブシェルの表示方法を指定することができます。ast_node_interactivityのデフォルトは"last_expr"(最後だけ)ですが、これを"all"とすることで、すべて表示することができます。

「$\log(x+1)$の5階までの微分を求めたい!」というような場合にも、こんな芸当もできてしまいます。

n次までの導関数を求める
import sympy
sympy.var("x y")
f =sympy.ln(x+1)
for i in range(6):
    print(str(i) + '階の微分')
    sympy.diff(f,x,i)