matplotlibの使い方メモ

http://www.ike-dyn.ritsumei.ac.jp/~uchida/scipy-lecture-notes/intro/matplotlib/matplotlib.html

http://d.hatena.ne.jp/y_n_c/20091122/1258904025

http://funini.com/kei/py/pylab.shtml

ipython -pylabってするといちいちimport とか show() とかしなくてもよくなる

 

もっとpythonとrの人 (主にpythonの人がrの人に対して) 友好的になって欲しい…

あ、卒研発表無事終わったし多分卒業出来ます (めでたしめでたし)


Numpy.savetxtでcsv出力をする方法

公式ドキュメントのnumpy.savetxt

import numpy

#行列生成
a = numpy.eye(10)

#保存
numpy.savetxt("a.csv", a, fmt="%.0f",delimiter=",")

これだと

1,0,0,0,0,0,0,0,0,0
0,1,0,0,0,0,0,0,0,0
0,0,1,0,0,0,0,0,0,0
0,0,0,1,0,0,0,0,0,0
0,0,0,0,1,0,0,0,0,0
0,0,0,0,0,1,0,0,0,0
0,0,0,0,0,0,1,0,0,0
0,0,0,0,0,0,0,1,0,0
0,0,0,0,0,0,0,0,1,0
0,0,0,0,0,0,0,0,0,1

ってファイルが出力される。

delimiterってのが数値の区切り文字で、今回はcsvなので “,” を選択。
fmtってので小数点以下何位まで出力するか選べる。%0.5fだと小数点以下5桁まで出力。fの他に指数表記のeも選べる。デフォルトは”%.18e”で小数点以下18桁目+eによる指数表記かな?
あとnewlineを指定すると改行文字が指定できる。デフォルトは”\n”


pythonでfinite field

有限体上の行列の計算をpythonでやりたい。
有限体上の計算は普通の計算と少しやり方が違うので、pythonで演算子が呼ばれた時に読み出される特殊メソッドを書き換えてやれば良いはず。
行列の計算は今までnumpyを使っていたのでこれをそのまま使う。
numpyのndarrayクラスを継承して__add__とかの特殊メソッドを書き換えればいけるかと思ったけど上手くいかなかった。

#!/usr/bin/env python  
# -*- coding: utf-8 -*- 
import numpy

class asdf(numpy.ndarray):
    def __add__(self, x):
        return 0
    def __mul__(self, x):
        return 1

a=numpy.arange(16).reshape(4,4)
b=numpy.arange(16).reshape(4,4)
"""
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
"""

print a+b
print a.dot(b)
"""
>>> print a+b
[[ 0  2  4  6]
 [ 8 10 12 14]
 [16 18 20 22]
 [24 26 28 30]]
>>> print a.dot(b)
[[ 56  62  68  74]
 [152 174 196 218]
 [248 286 324 362]
 [344 398 452 506]]
"""


a=asdf(shape=a.shape, buffer=a, dtype=a.dtype)
b=asdf(shape=b.shape, buffer=b, dtype=b.dtype)

"""
>>> a
asdf([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> b
asdf([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
"""

print a+b
print a.dot(b)
"""
>>>print a+b
0
>>> print a.dot(b)
[[ 56  62  68  74]
 [152 174 196 218]
 [248 286 324 362]
 [344 398 452 506]]
"""

どうやらdot関数はそのインスタンスの__add__とかを呼び出して使ってるわけではないみたい。

numpyと有限体を扱うモジュールのGaloisってのを組み合わせて同じようなことをやってる人がいたけど、この人もうまくいってないみたい。
Can I use my own Python class with numpy or some other matrix library?

同じ有限体とかを使えるNZMATHってモジュールをみつけたけど、これは使い方がよくわからない
NZMATH
ドキュメント読んでもコードがこれっぽっちも出てこないし解説する気が見えてこない…

あとあんまり関係ないけど面白そうなの見つけました
Sympy

SymPy は記号計算を行うための Python のライブラリである。Python を使った離散事象のシミュレーション言語 SimPy (en) と混同されやすいが、別のものである。 計算機代数システム (computer algebra system, CAS) として完備することを目的として開発が進められているが、拡張性を損なわないように、ソースコードは可能な限り簡素に保たれている。SymPy はすべて Python で書かれており、他の外部のライブラリは、オプションとしてのプロット機能以外には、何も必要としない。

ふーむ


pythonで指定したディレクトリ以下のコードを読み込んで検索(ついでに開く)

どうしてもnumpyのndarray同士のdot関数を書き換えたかったのだけれどもドキュメント見てもどんな計算してるのかわからない。
numpy.source(numpy.dot)してもソースコードが見れない!
ので力ずくで探した

hoge.py

import os, sys
for dpath,dnames,fnames in os.walk(sys.argv[1]):
    for fname in fnames:
        fullpath = dpath+"/"+fname
        for line in open(fullpath, "r"):
            if line.find(sys.argv[2]) != -1:
                print fullpath

これでターミナルで
python hoge.py ディレクトリ “文字列”
とするとディレクトリ以下のファイルを読み込んで文字列を検索してくれる。
ただし2列にまたがってたりすると検索されない。

python hoge.py /Library/Python/2.7/site-packages/numpy-1.8.0.dev_3abd869_20121222-py2.7-macosx-10.8-intel.egg/numpy/ "def dot"

で実行すると

/Library/Python/2.7/site-packages/numpy-1.8.0.dev_3abd869_20121222-py2.7-macosx-10.8-intel.egg/numpy/distutils/misc_util.py
/Library/Python/2.7/site-packages/numpy-1.8.0.dev_3abd869_20121222-py2.7-macosx-10.8-intel.egg/numpy/ma/extras.py
/Library/Python/2.7/site-packages/numpy-1.8.0.dev_3abd869_20121222-py2.7-macosx-10.8-intel.egg/numpy/oldnumeric/ma.py
/Library/Python/2.7/site-packages/numpy-1.8.0.dev_3abd869_20121222-py2.7-macosx-10.8-intel.egg/numpy/oldnumeric/ma.py

とりあえず全部 openしてみるとextras.pyにそれらしきものがあった。
全部openするにはさっきのコードでprint fullpathってところの次にos.system(“open “+fullpath)って付け加えればいい。
めでたしめでたし。


研究室のサーバー(RHEL4)にnumpyをインストールしたかった

webで調べつつやってたけど、リンク切れとかしまくっててどうしたら良いのかわからないから一応メモ

Install NumPy and SciPy on Ubuntu


ここを参考に
pythonは2.7がはいっていた

sudo pip install numpy
しかしfortranが入ってない

sudo apt-get install libatlas-base-dev gfortran
apt-getが入ってない!

sudo yum install apt
yumが入ってない!

yumをインストール
http://d.hatena.ne.jp/ZIGOROu/20061217/1166377279
よくわからなかったのでこの通りにすべてやる

動かない
http://dag.wieers.com/rpm/FAQ.php#B4
sudo rpm -Uhv http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm
http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm を取得しています
Preparing... ########################################### [100%]
file /etc/smart/channels/rpmforge.channel from install of rpmforge-release-0.3.6-1.el4.rf conflicts with file from package rpmforge-release-0.3.6-1.el4.rf
file /etc/sysconfig/rhn/sources.rpmforge.txt from install of rpmforge-release-0.3.6-1.el4.rf conflicts with file from package rpmforge-release-0.3.6-1.el4.rf

rpmforge-release-0.3.6-1.el4.rfが重複かなんかしてる?

sudo rpm -e rpmforge-release-0.3.6-1.el4.rf
rpmforge-release-0.3.6-1.el4.rfを消したっぽい

もっかい
sudo rpm -Uhv http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm
http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm を取得しています
Preparing... ########################################### [100%]
1:rpmforge-release ########################################### [100%]

なんかはいったっぽい

sudo rpm -Uhv http://apt.sw.be/redhat/el3/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el3.rf.x86_64.rpm
http://apt.sw.be/redhat/el3/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el3.rf.x86_64.rpm を取得しています
Preparing... ########################################### [100%]
package rpmforge-release-0.3.6-1.el4.rf (which is newer than rpmforge-release-0.3.6-1.el3.rf) is already installed


もっかいこの通りにyumをインストール
http://d.hatena.ne.jp/ZIGOROu/20061217/1166377279

動かない
equired to run yum. The error leading to this problem was:
/usr/lib/python2.3/site-packages/cElementTree.so: cannot open shared object file: No such file or directory

多分いれたElementTreeのがちがう?

http://pkgs.repoforge.org/python-elementtree/
を確認してRHEL4 and CentOS-4 x86 64bitのやつをいれる
yum動く!

sudo yum install apt
apt-getできる!

sudo apt-get install libatlas-base-dev gfortran
E: パッケージ libatlas-base-dev が見付かりません


リポジトリとかが入ってないっぽい?
もう疲れました…

参考
http://d.hatena.ne.jp/ZIGOROu/20061217/1166377279
http://dag.wieers.com/rpm/FAQ.php#B4
http://ayo.freshrpms.net/