おっぱいそん!

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

anacondaでインストールしたpython2とpython3をsublimeText上で使う

普段はMACでpython2.7でSublimeTextというエディターを使ってコードを書いていますが、python3を使いたいことがあったので、ptthon2と3を今の環境のまま共存できるようにしました。 (完全に自分用の忘備録で他のサイトを見たほうが分かりやすいと思うので、…

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

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

Octave

とある論文のsupplemental materialにあったMATLAB(線形代数のパッケージを詰め込んだ有料ソフト)のコードを動かしたかったので、Octave(MATLABと互換性のある無料ソフト)をインストールして使ってみた。 MAC OSX(Yosemite)へのインストールはhttps://…

行列のランクと固有値の関係

行列のrankとnonzeroの固有値の関係について、すぐに忘れるのでメモしておく。 結論から先に書くと、一般の正方行列Aについて、 rank A ≧ Aの(重複度も含めた)nonzeroの固有値の数 が成り立つ。 特に、対角化可能な行列の場合には rank = nonzeroの固有値…

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

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

関数で複数の返り値を返す方法

pythonにおいて関数で複数の値を返すと、デフォルトではタプルになる。 def f_tuple(x): plus = x + 1 cubic = x ** 3 return (plus, cubic) result = f_tuple(2) print result[1] returnの後の(plus, cubic)はカッコをのけても同じ動きをする。 また、受け…

Named tuple

pythonの組み込みのコンテナ型(=コレクション型)にはリスト、タプル、ディクショナリがある。 この記事では、名前付きタプルというコンテナ型を紹介したい。(名前つきタプルはクラスの書き方をふんだんに使っているので、クラスを知らない人はクラスを先…

numpyの型

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

2つの行列が相似であることの確認

2つの正方行列A,Bが与えられた時に、この2つの行列が相似、つまり、ある正則行列P(Pはユニタリ行列でなくてもよい)が存在して、 A = P B P^(-1) と書けるかどうかを、数値的に確かめたい。 (結論から言うと、僕はどうすればいいか分かりません。いい解決…

MacBook Pro (Mid 2012, 13インチ)のSATA cableの交換

2週間ほど前に、MACのOSが立ち上がらなくなりました。 結論から言うと、SATAケーブルを交換したら治ったのですが、その記録をここに書いておきます。 *特にMACBookPro Mid 2012モデルの方向けの追記をしました。 時系列 MACを久々に再起動させようとすると…

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))…

複素数型が実数に近かったら、実数型にする

complex型のndarrayが与えられた時に、もし複素数の部分が小さいなら、floatなどの実数の型で近似する方法。 そういう関数、ありそうだと思ってググったらNumpyの関数にnumpy.real_if_closeというのがあった。 numpy.real_if_close(a, tol=100) この関数はNd…

Pythonの代入の挙動

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

Pythonの型の分類と代入

変数が指すオブジェクトがどれかなどの振る舞いをすぐ忘れてしまうのでメモしておく。 組み込み型の分類 まず、Pythonの組み込み型についてまとめておく。 管理方式 管理方式の違いで分類すると、以下のようになる。 コレクション型(=コンテナ型):複数の…

numpy.matrixとnumpy.ndarrayの違い

numpy.matrixと2次元のnumpy.ndarrayは同じことができるが、numpy.matrixでできることはすべてnumpy.ndarrayでできる。 numpy.matrixがある理由はたぶん、行列を扱う時にはnumpy.ndarrayより見やすいので。 行列以外の高次のテンソルを扱う時には、混乱を避…

固有値問題

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…

アクセス解析

ふと、アクセス解析を見たら、「おっぱい 分解」というキーワードで検索して、たどり着いている人がいてワロタ。

要素積を任意の軸について

要素積 A*B or np.multiply(A,B) をndarray A, B の任意の軸について実行する方法。 (基本的な使い方は、以前の記事http://oppython.hatenablog.com/entry/2014/01/05/004454で紹介したので、そちらを参考に。)np.multiply(A, B)はn次元配列Aと1次元配列B…

モジュールのimportの仕方

pythonでモジュールをインポートする書き方/仕方はいろいろあるので、まとめておく。自分でfoofile.pyのなかに以下のような関数を作っていたとする。 #foofile.py def func(x): return x これをrun.pyで読み込んで使うには、 #run.py import foofile print f…

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()…