目次


Python 入門ガイド

この科学計算向け言語を 5 分で使いこなす

Comments

科学研究で役に立ち、しかも習得しやすいプログラミング言語をお探しですか?そのような言語の候補は、Python をおいて他にありません。この記事では、このわかりやすくて単純なプラグラミング言語を使い始める際に知っておかなければならない基本的な概念を紹介し、代数計算からデータを基にしたグラフ出力の生成に至るまで、あらゆる処理を Python で実行する方法を説明します。

科学計算の復習

科学計算では科学的な問題の解を見つけるために、コンピューターを使用します。具体的には、コンピューターは方程式を解くために使用されます。1 つの非線形方程式 (累乗根を求める方程式) から連立線形代数方程式 (数値線形代数)、さらには連立非線形偏微分方程式 (計算物理学) に至るまで、あらゆる方程式を解く目的で使用されます。

これまで、こうした問題を解くための数値アルゴリズムは、C/C++ や Fortran などの言語を使用してプログラミングされており、それは今も変わりません。では、Python は科学計算のどの部分で役立つのでしょうか?それは、新しい (または古い) アルゴリズムを短時間で実装してテストするという部分です。また、通常は米国一流の研究所で行われるような物理コードのマーシャリングにも Python が役立ちます。Python は楽しく簡単に習得できて、しかも極めて強力です。つまり、Python を導入するかどうか迷う必要はまったくありません。さっそく使ってみましょう!

Python をダウンロードする

Linux または macOS オペレーティング・システムで稼働するコンピューターであれば、どれでも Python を使用できます。さらに、iPad 上でも Pythonista というアプリケーションを使用すれば Python を実行できます。Python.org からは Windows 対応のバージョンもダウンロードできます。ただし、科学計算を行う場合には (さらには、そうでない場合であっても)、Anaconda をダウンロードしてインストールすることをお勧めします。Anaconda では完全な Python がインストールされる他、科学計算向けの優れたパッケージ (私はモジュールと呼んでいます) の多くも同梱されています。その上、統合開発環境 Spyder にも簡単にアクセスできます。

Python を利用する

Anaconda をインストールしたら、Anaconda ナビゲーターのアイコンをクリックして、早速 Python を楽しんでください。右下にあるウィンドウに、コマンド・プロンプトが表示されます。このプロンプトの右側にマウスのカーソルを合わせるだけで、Python コマンドの入力を開始できます。従来の方法に準じて新しいプログラミング言語を学ぶのであれば、「print("Hello World!")」と入力してから Return キーを押します。

コマンド・プロンプトを使用して 1 つ以上のコマンドを入力することで、コード・スニペットを簡単にテストしたり、作業用の出力を生成したりできます。ある程度の行数からなるコードに関しては、独立したプログラム・ファイルを生成して保存することをお勧めします (後で詳しく説明します)。

少なくとも Linux 上と macOS 上で使用できる別の方法としては、ターミナル・ウィンドウを開き、コマンド・プロンプトに対して「Python」と入力します。これにより、Python コマンド・プロンプトが起動されます。後は、コマンドの入力を開始して Python コードを実行できます。ターミナル・ウィンドウに「idle」と入力すると、新しいウィンドウが開いて、IDLE という Python エディターを使えるようになります。このエディターでは、新しい Python スクリプトを作成した後、F5 コマンドを押すだけでそのスクリプトを実行できます。

名前が意味するもの

Python をインストールして、コマンドの入力を開始する方法を把握したので、ここからは、数学と科学に取り組みましょう。コンピューター・プログラミングによって方程式を解くには、変数を使用することと、この変数を表す数値を操作する必要があります。Python で変数を定義するには、コマンド・プロンプトで、例えば次のコマンドを入力します。

>>> x0 = 1.5
>>> x1 = 2.0

できました! x0x1 という名前の新しい 2 つの変数を同時に作成して、それぞれの変数に値 1.5、値 2.0 を割り当てました。これらの変数の定義がどのように機能するかは、次のコマンドを入力するだけで確認できます。

>>> x0,x1

あるいは、print 関数を呼び出すという方法もあります。

>>> print (x0,x1)

これらの変数を実数 (浮動小数点数) や整数として宣言する必要はありません。それは、Python は動的型付け言語だからです。つまり、Python が変数に割り当てられた値に基づいて、その変数の型をその場で判断します。

コンピューターと代数

それぞれに数値が割り当てられた 2 つの変数があれば、それらの変数を使った単純なコンピューター代数に取り組むことができます。具体的には、加算、減算、乗算、除算などの計算です。このような計算は、コンピューターが得意とするところです。代数がどのように処理されるのかを確認するには、コマンド・プロンプトで次のコマンドを入力します。

>>> yp = x0 + x1
>>> ym = x1 - x0
>>> yt = x0*x1
>>> yd = x1/x0
>>> print(yp,ym,yt,yd)

これはもう本格的な科学計算です。

コンピューターとロジック

コンピューターで処理できるのが代数だけだとしたら、科学計算におけるコンピューターの影響力は限られています。けれども、コンピューターはロジックも得意としています。この点が、複雑なプログラムを可能にしているのです。おそらく皆さんにとって、if this, then that (IFTTT) というロジックはお馴染みのことでしょう。ここで話題にしているのは IFTTT そのものではありませんが、それに近い、プログラム・フロー制御です。つまり、コンピューターでは特定の条件下では特定のコードの行またはブロック (複数の行の集まり) を実行し、別の条件下では別のコードの行またはブロックを実行することができるということです。これが実際に何を意味するのかを確認するために、次のコマンドを入力してください。

>>> x1 = 2.0
>>> if x1 < 0:
        x = 0
        print("Negative switched to zero")
    elif x1 == 0:
        print ("Zero")
    else:
        print ("x1 is positive")

上記のコードは if ブロックの例です。ここで、elif は else if の省略形で、前の 2 つの (あるいは必要な数の) コード・ブロックのテストが失敗した場合、else が実行されます。詳しい説明については、このリンク先の Python ドキュメントに記載されている「その他の制御フローツール」を参照してください。

科学計算における多くのアルゴリズムを背後で支えているのは、使用するデータを変えて同じコード・ブロックを複数回実行できるという機能に関連する能力です。同じコード・ブロックを複数回実行する場合に役立つのがループです。次のコード・スニペットを例に挙げると、ここでは Python の組み込み関数 range を使用して、0 を出発点に 10 個の整数からなるリストを生成します。

>>> x0 = 1.5
>>> for i in range(10):
        x1 = x0 + i

上記のコードは x1 = x0 + i という計算を、i=0 から i=9 まで 10 回実行します。

関数の概要

関数の機能は、大規模なプログラミング・タスクを複数の小さなサブタスク (関数) に分割するという重要なプログラミング・プロセスを始めることです。Python には組み込み関数と外部ライブラリーがあります (外部ライブラリーについては後で説明します)。それとは別に、独自の関数を作成することもできます。関数を作成するには、以下に示すように Python のキーワード def を使用し、その後に関数の名前 (この例では f) を続けます。この関数は、入力変数 x を取り、プログラム化した代数式を評価して求めた値を返します。

>>> def f(x):
        return x**3 - 5*x**2 + 5*x + 1 
>>> x0 = 1
>>> print ("f(x0) = ", f(x0))

上記の関数を分析した微分係数を求める関数を作成するには、次のように入力します。

>>> def fp(x):
        return 3*x**2 - 10*x + 5
>>> x1 = 2
>>> print ("The derivative of f(x) is: ", fp(2))

ファイルを作成する

これまでのところは一貫して、コマンド・プロンプトで Python コマンドを入力しました。使い捨てできる短いコードであれば、それで問題ありませんが、大規模なプロジェクトに取り組んでいる場合、あるいは後で使えるように作業を保存する必要がある場合は、新しい Python ファイル、つまりスクリプトを作成することをお勧めします。スクリプトを作成するには、ターミナル・ウィンドウで任意のテキスト・エディターを使用できます。たとえば vi を使用する場合、「vi newton.py」と入力するだけで、newton という名前で空のテキスト・ファイルが作成されます。また、これが Python ファイルであることが誰にでも (特にコンピューターに) わかるように、ファイル名にはファイル拡張子 .py が付けられます。ファイルが作成されたら、それを開いて Python コマンドの入力を開始できます。

: Python ではコード・ブロックを示すためにホワイト・スペースを使用します。標準的な規約では、コード・ブロック (1 つの関数を構成するコード行など) や if-then ブロックを新しく開始するときは、そのブロックを 4 個のスペースでインデントします。

プログラムを作成する際の別の重要な側面として、コメント (ファイルを読む人に、そのスクリプトが処理する内容を伝える行) があります。単一行のコマンドはポンド記号 (#) で始まります。複数行にわたるコメントを作成する場合は、バックスラッシュの後に # を続けて (\#) からコメントを入力し、コメントを #\ で終了します。コードを入力した後、それを保存してからエディターを終了します。保存したコードをターミナル・ウィンドウのコマンド・ラインから実行するには (保存したファイルと同じディレクトリーがカレント・ディレクトリーとなっていることを前提とします)、「python newton.py」と入力します。

科学計算では一般に、問題やタスクを複数の小さな問題、つまりサブタスクに分割することが賢明な方法とされています。Python では、こうしたサブタスクをモジュールと呼んでいます。モジュールは、定義とステートメントが含まれる付加的な Python ファイルの 1 つに過ぎません (ファイル拡張子 .py が付けられます)。事前ビルドされたモジュールを入手することもできます。プログラム内でモジュールを使用するには、キーワード import を使用して、そのモジュールをインポートします。例えば、math モジュールには sine や cosine などの基本的な数学関数が含まれています。このモジュールを使用するには、キーワード import math を使用します。

科学計算の力を Python にインポートする

Python で使用することになる強力な科学計算モジュールとしては、NumPySciPy の 2 つが挙げられます。NumPy には多数の強力な機能が含まれていますが、なかでも、ここで特に興味深いのは、同じデータ型の数値の集合を作成して、array という名前の単一の変数に割り当てることができる機能です。また、このモジュールには線形代数、フーリエ変換、乱数を処理する機能も幅広く揃っています。SciPy は、NumPy に加え、他の多数のパッケージからなる包括的な科学計算エコシステムです。次のセクションでは、このモジュールに含まれる matplotlib を取り上げます。以下の単純なコードは、コード・スニペット内で NumPy をインポートして使用する例を示しています。

import numpy as np
/* Now we create and assign a list of integers 0 through 9 to x[0] through x[9], effectively creating a one-dimensional NumPy array */

x = np.linspace(10) 
print(x)

Python を使用してグラフ出力を生成する

コードの実行結果を理解するには、それを他者に伝える上でも、科学計算によるデータ出力から有効なグラフを生成することが重要な鍵となります。Python でこの重要な目標を達成する際に使用する標準的なパッケージは、matplotlib モジュールです。以下に示すように、このモジュールには簡単にアクセスできて、使用するのも簡単です。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.arange(0, 5, 0.1)
>>> y = np.sin(x)
>>> plt.plot(x,y)
>>> plt.show()

matplotlib モジュールには、グラフの線のタイプ、色、スタイルを制御するコマンドと、グラフを保存するコマンドが揃っています。

次のステップ

Web 上には、Python と科学計算でのその役割を学ぶのに役立つサイトが数百もあります。以下に、詳細を学ぶために利用できる優れたリソースを紹介します。

コーディングをお楽しみください!


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Open source, ビジネス・アナリティクス
ArticleID=1063001
ArticleTitle=Python 入門ガイド
publish-date=09202018