おっぱいそん!

pythonを数値計算に使うときのテクニックとかをまとめていきたい。

numpy

リストの最大値(最小値)のindexを取得する

NumpyのArrayだと、argmaxを使って、最大値のindexを取得できる。 (ただし、最大値が重複して存在する場合は、一番小さいindexを返す仕様になっている) numpy.argmax — NumPy v1.10 Manual PythonのListにも同じような関数が用意されているかと思ったんだ…

pythonでフィッティングをする

pythonでfittingをする方法。例えば、 というをパラメータとする関数でデータ点を が最小になるようにfittingしたいとする(最小二乗法)。 scipy.optimizeのcurve_fitを使うのが楽(scipy.optimizeにはleastsqという関数もあり、こちらでも同じことができる…

numpyの型

自分用のメモにまとめておく。numpyの基本的な型は以下の5つ。 真偽値 (bool), (符号付き)整数 (int) 符号なし整数 (uint) 浮動小数点数 (float) 複素数 (complex) ただし、(bool型を除いた)データ型はそれぞれ異なるサイズがああります。 たとえば、int…

2つのarrayが近似的に同じか比べる

2つのNdarrayが近い値かどうかを比べるには、numpy.allcloseを使う。 numpy.allclose(a, b, rtol=1e-05, atol=1e-08) 2つのarray a,bを受け取って(a,bは同じshapeのarrayでないといけない)、すべての成分が absolute(a - b) ≦ (atol + rtol * absolute(b))…

Pythonの代入の挙動

Pythonで代入をした時に、各変数がどのオブジェクトを指すかをまとめておく。特に、list(リスト)とNdarray(配列)の違いをば。 前回の記事も参照 : http://oppython.hatenablog.com/entry/2015/01/15/014729 例1 前回の記事でも書いたようにPythonでは、…

固有値問題

Pythonで固有値問題を解く方法についてメモしておく。 メジャーな方法として、以下の3つがある numpy.linalgの関数を使う。 scipy.linalgの関数を使う。 scipy.sparse.linalgの関数を使う。 numpy.linalgとscipy.linalgには以下の4つの関数がある。 eig:一…

外積

Numpyで外積を計算する方法をまとめておく。ベクトル(1次元配列)同士の外積、つまり c[i,j] = a[i]b[j] はnumpy.outerを使って、 http://docs.scipy.org/doc/numpy/reference/generated/numpy.outer.html import numpy as np a = np.ones(3) b = np.arange(2…

pythonで特異値分解

pythonで特異値分解(singular value decomposition,SVD)をする時のメモ。 一般の密行列のSVD あまり選択肢がないみたい。とりあえず、Numpy or ScipyのSVDを使っとけば間違いなさそう。 numpy.linalg.svd(a, full_matrices=1, compute_uv=1) scipy.linalg.sv…

Fancy Indexing:配列の一部を条件をつけて取り出す

aを適当なN次元配列とする。 a[a_1, a_2, a_3, ]とすると、配列の1つの成分を取り出せる。 a[リスト]とすると、1次元配列のリスト番目の成分のみ取り出した配列を返す。 (上の用に配列の1つの成分だけ取り出したい時にはtuple(リスト)のようにtupleにして渡…

numpyのテンソル(配列)関係

numpy.transpose(a, axes=None) 配列の足の順番を入れ替える。 a:入れ替えたい配列 axes:順番の指定(指定なしなら、逆順になる) import numpy as np a = np.arange(24).reshape((2,3,4)) print a.shape print np.transpose(a).shape print a.transpose()…