本HPでは、Numpyの記事をいくつかに分類しています。実際に使ってみるインポートする簡単な演算Numpyとは?¶Numpyは、標準の演算が遅いというPythonの欠点を補うために開発された高速なベクトル演算をサポートするライブラリです。Pythonで科学技術計算をする上では必須と言っても良いライブラリです。(本稿の大部分は、「Pythonによるデータ分析入門(O'REILLY、ピンク本!)」の第4章を参考にして書かれています。この本は翻訳もわかりやすく、とても読みやすい本なのでおすすめです。)なぜNumpyが必要?¶C言語やFortranのような静的型付け言語(コンパイル時に型を決定する言語)では、配列や変数を宣言する際、型を明示的にコンパイラに伝えます。このようにコンパイルの段階で型が決まっていると、マシンとしては余計な動作をする必要が無いために効率よくメモリを使用できる上に高速に動作します。Pythonのような動的型付け言語(実行時に型を決める言語)では、そのような高速な動作を失う代わりに、型を気にせずにリストに入れたり、宣言の手間が省けたりと、柔軟で短いコードが書けるようになります。科学技術計算においては動作の遅さは致命的になります。Pythonで科学技術計算しようとするならば、高速な動作が必要になるところでは型を指定して高速な計算ができるようにする必要があります。Numpyでは、C言語の配列をPythonで扱いやすいオブジェクト(ndarray)として使うことで、高速でありながら柔軟なプログラミングが可能です。CやFortranと同様に大規模配列を扱うことにも長けているため、使いこなせればかなり強力なツールです。Numpyは非常に高機能であり、全ての機能を1ページで説明することは難しいです。ここでは、いくつかの記事にわけ、ざっくりと概観していくことにします。Fortranとの連携を可能にする低級インターフェイスの提供バイナリやテキストでのファイル入出力を簡単にできるのようなものがあります。行列演算などの実装はCやFortranで使われているライブラリを使用しており、同等の速度を発揮します。array)オブジェクトのことを指します。ndarrayはCの配列に加え、その形状や型、関数などを情報として持っています。本稿でも、特に断らない限り、配列はndarrayのことを意味することにします。Numpyを使う際の注意点¶Numpyも万能ではなく、得意ではない処理もあります。それは、配列要素ごとに回すforループです。要素ごとにforループを回すと、Pythonの遅さが如実に出てしまい、Numpyの利点が活かせません。Numpyが本当に力を発揮するのはベクトル演算であり、それは並列化によって実現されています。要素ごとの計算をしたい場合は、CやFortranでその部分だけを書き、それをPythonで呼び出すNumbaやCythonといった他のライブラリを使用しコンパイルを行うと言った方法があります。ベクトル化を試みて、それが難しい場合は上記のような手段を考えてみると良いでしょう。可視化用ライブラリインポートに失敗する場合、numpyがそもそもインストールされていない可能性があります。その場合以下のようなコマンドを実行してください。numpy」condaはコンパイル済みのものをインストールするためにインストールエラーが起きにくいです。pipはインストール時にコンパイルするため、コンパイルエラーが起きる場合があります(特にWindows)。Anacondaで一気に導入すると良いでしょう。ndarrayの構造¶さっそく、一次元配列を作ってみましょう。np.array関数にリストやタプルを渡すことで作ることが出来ます。])ndarrayの重要な属性として、shape、dtypeがあります。type()はPythonの組み込み関数で、引数が何のオブジェクトかを教えてくれます(dtypeとは違うものなので注意)。いくつか例を挙げましょう。xが何のオブジェクトか表示するtype(x)Out[3]:numpy.ndarrayshapeは、まさに配列の形状で、多次元配列であれば、軸に沿った要素の個数をそれぞれの軸について並べたタプルです。一次元であれば、(n,)のようなタプルになります。軸が一つしか含まれない場合、(n)とすると単なるnになってしまうので、(n,)のようにカンマが付きます。xの形状x.shapeOut[4]:(3,)dtypeは、配列の型を表すものです(floatやint、complexなど、詳細は別記事参照)。xの型(この場合8バイト浮動小数点型)x.dtypeOut[5]:dtype('float64')ndimは、配列の次元を表します。xの次元x.ndimOut[6]:1多次元配列はこのように定義できます。一行でも書いてよいですが、見やすい方法を選ぶといいでしょう。次元(つまりlen(y.shape)と等しい)y.ndimOut[10]:2整数を入れると、intとして配列を作ります。自動的に4バイトintと型推論しているx.dtypeOut[12]:dtype('int32')もちろん複素数も扱えます。実部、虚部それぞれ8バイトの16バイト複素数x.dtypeOut[14]:dtype('complex128')要素へのアクセス¶また、各要素にアクセスするためには、リストやタプルのようにインデックスを指定します。多次元配列でのアクセスは、リストなどと違う記法なので注意してください。19]])簡単な演算¶スカラーとの四則演算は普通のベクトルのような書き方ができます(Fortranと一緒)。このような演算はリストやタプルでは出来ないので、そのためにndarrayに変換することもよくあります。7.e-06])同じ形状の配列同士の四則演算は、要素ごとに演算した結果になります。0.6])多次元配列でも同じように要素ごとの演算になります。行列積を計算したい場合は、np.dot関数を用いるか、Python3.5以降であれば@マークを使えます。お気軽にご連絡ください。