ナンクル力学系

学んだ事を書き連ねていこう。

matplotlib でタイル状にグラフをしきつめるようなプロットをする

leave a comment »

こういうグラフを書きたい:

https://i0.wp.com/farm3.static.flickr.com/2568/3977125592_ae7c87d90e.jpg
最近気づいたのは pylab は遅いけど matplotlib.pyplot だと早いということ. pylab を使うと簡単にかけそうだけど,たくさん書きたいので matplotlib.pyplot で頑張ることに.

どこの処理が時間かかってるのか計るコードも入れた (tm なんちゃらってのが計測している部分). 最新の matplotlib (0.99) が必要.

コード:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid import AxesGrid
import numpy

tm = []
def tm_append(tm):
    import time
    tm.append(time.time())
def tm_print_diff(tm):
    for (t0,t1) in zip(tm[:-1],tm[1:]):
        print t1 - t0

list_func = [ numpy.sin,
              lambda x: numpy.exp(-0.1*x),
              lambda x: numpy.sin(x)*numpy.exp(-0.1*x) ]
list_tmax = [5, 10, 15, 20]
nrows_ncols = (len(list_func), len(list_tmax))

tm_append(tm) ## time
F = plt.figure(1)
F.clf()
tm_append(tm) ## time
grid = AxesGrid(F, 111, # similar to subplot(111)
                nrows_ncols = nrows_ncols,
                axes_pad = 0.0,
                add_all=True,
                aspect=False,
                )
tm_append(tm) ## time

for ax in grid:
    ax.cla()
grid.set_label_mode('L')
tm_append(tm) ## time

i = 0
for f in list_func:
    for tmax in list_tmax:
        t = numpy.arange(0,tmax,0.1)
        grid[i].plot(t, f(t))
        i += 1
tm_append(tm) ## time

plt.draw()
plt.savefig('axesgrid.png')
#plt.show()
tm_append(tm) ## time

tm_print_diff(tm)

結果:

1.4825220108
2.09476304054
0.745758056641
0.0568108558655
1.95767402649

やっぱり, plt.figure (1行目) や AxesGrid (2行目) は時間かかるっぽいな. 二回目以降は for ax in grid 以下を実行してやれば良いので,かなりお得かな. ax.cla() した後で grid.set_label_mode(‘L’) して一番下と一番左以外の軸にラベルがつかないように しているのがミソ.

Advertisements

Written by tkf

October 3, 2009 at 10:50 pm

Posted in PC

Tagged with ,

ローカルで作ってたお勉強用のwikiっぽいものをアップした

leave a comment »

  • 巨人の肩の上へ/tkf’s Brain Dump
  • 今見て,役に立ちそうなやつは Fokker–Planck 方程式と自己相関関数の話くらいかなあ.

    ちなみに, Sphinx (日本語サイト) っていうドキュメント生成システムを使っている.気に入っている点:

    • reSTを使ってかける
    • wikiと違って ローカルでサクサク見えるから
    • javascript を使った検索機能
    • 数式かける
    • コードハイライト

    ソースは github で公開している(arataka’s note at master – GitHub). Wiki みたく編集の履歴がとれないのをこっちでカバー.

    今から内容増えるかは不明w 量子力学要らない非物理屋さんのための統計力学とか書きたいんだけどなあ.

    Written by tkf

    September 26, 2009 at 12:28 am

    Posted in 研究日誌

    Tagged with ,

    PySmell で標準ライブラリ用の PYSMELLTAGS を作る

    leave a comment »

    pysmell /usr/lib/python2.5/ -o ~/PYSMELLTAGS とやると重すぎて使えなかったけど, pysmell /usr/lib/python2.5/ -x site-packages test -o ~/PYSMELLTAGS とやるとまともな速度で動いた.

    ただ, os. とかの補完はちゃんと効かないっぽい? os.py のソース見てみたら 解析が難しそう(動的に読み込んでいる)感じだったから,それが原因かな?

    参考

    Written by tkf

    September 24, 2009 at 3:18 pm

    Posted in PC

    Tagged with , ,

    GNU screen でヘルプコマンドを読むときに使う –help|less を一発入力

    leave a comment »

    bind ^H stuff "--help 2>&1 | less"
    

    .scrrenrc などに書く.

    • sutff STRING で, STRING をキーボードから入力した場合と同じことに.
    • 2>&1 で,標準エラー出力も less へ.

    Written by tkf

    September 24, 2009 at 12:58 pm

    Posted in PC

    Tagged with

    英辞郎 IV (CD版) のデータを rdic で使えるように変換する方法

    leave a comment »

    ちょっと前に書いたメモだけど.rdic のおかげで英語の文章書いたり論文読んだりが Ubuntu だけで出来るのはうれしい.

    • Linux で使えるむちゃくちゃ便利な辞書 rdic を使いたい.
    • 英辞郎 IV (CD版) を使うとなぜか変換ミスるのでどうにかしたい.

    PDIC1行形式へ書き出す

    • Personal Dictionary (PDICU.EXE) を起動
    • File > 辞書設定(詳細) > 辞書一覧の辞書の上で右クリック > 辞書の変換 > 変換形式をPDIC1行形式にして,ひたすら書き出す

    cnv2rdic.rb が対応している PDIC1行形式ファイルを作る

    出力されたテキストは,

    • エンコーディング: Shift_JIS (多分).
    • cnv2rdic.rb が対応しているのはセパレータが " : " のもの.
    • でも,英辞郎 IV は,セパレータが " /// " になってしまうみたい.

    変換用のシェル関数(関数にする必要ないけどw):

    cnv2colon () {
            for src in "$@"
            do
                    trg=`basename $src`
                    echo $trg
                    nkf -w8 $src | sed "s/ \/\/\/ / \: /" | nkf -s > $trg
            done
    }
    

    cnv2rdic.rb で変換した後,行頭に"■"を加える

    • コマンドを実行する環境の文字コードに注意!
      • 端末の文字コード
        • これとシェルの文字コードがあっていないと,コピペ出来ない!
        • gnome-terminal の場合: メニューバー > 端末 > 文字コードの設定 > EUC-JP を選択
      • 環境変数 $LANG
        • export LANG=ja_JP.eucJP; export LANGVAR=ja_JP.eucJP

    変換コマンド:

    srcpath=$HOME/fsp_disk/misc/eijiro4/pdic-1l-txt/cnv2colon
    ruby -Ke cnv2rdic.rb $srcpath/eijiro-112.txt | sort -k1,1 -t: -f | sed "s/^/■/" > eijiro-112.euc &
    ruby -Ke cnv2rdic.rb $srcpath/waeiji-112.txt | sort -k1,1 -t: -f | sed "s/^/■/" > waeiji-112.euc &
    ruby -Ke cnv2rdic.rb $srcpath/reiji-112.txt | sort -k1,1 -t: -f | sed "s/^/■/" > reiji-112.euc &
    ruby -Ke cnv2rdic.rb $srcpath/ryaku-112.txt | sort -k1,1 -t: -f | sed "s/^/■/" > ryaku-112.euc &
    ruby -Ke cnv2rdic.rb $srcpath/reiji-112.txt | sort -k1,1 -t: -f | sed "s/^/■/" > reiji-112.euc &
    

    実行環境を整える

    起動用スクリプト:

    #!/bin/sh
    export LANG=ja_JP.eucJP
    export LANGVAR=ja_JP.eucJP
    
    RD=${HOME}/misc/rdic/rdic-0.1.8
    DICD=${RD}
    VER=112
    DICS="\
    $DICD/eijiro-$VER.euc \
    $DICD/waeiji-$VER.euc \
    $DICD/ryaku-$VER.euc \
    $DICD/reiji-$VER.euc"
    
    gnome-terminal \
        --disable-factory \
        --window-with-profile=rdic \
        -e "$RD/rdic -b $DICS"
    
    • これに適当な名前をつけて実行権限をつければ(chmod u+x ファイル名)OK.
    • sudo ln -s ファイルへのパス /usr/local/bin/適当なファイル名(コマンド) とすれば, Alt + F2 で立ち上がる 「アプリケーションの実行」 で 補完が効くので便利.

    おまけ

    辞書ファイルの先頭部分を確認するための関数 (head して nkf で utf-8 に):

    hnkf-w8(){ head $1 | nkf -w8 }
    

    おまけ2

    ちなみに,emacs から英辞郎を使う場合にも,セパレータの変換は必要.

    参考

    Written by tkf

    September 24, 2009 at 9:46 am

    Posted in PC

    Tagged with ,

    Waseda.L#1 の発表レポ

    with one comment

    復習大事!

    @nobu_k(id:nobu-q) さん (検索エンジン)

    • 研究用に使えるカスタマイズ可能な検索エンジンを作る話
      • 今の検索エンジンの研究には,実装すべきことが多すぎて大変!
        • 同じ手法でも論文によって結果が違うとか,よくあることだったり
      • モジュールを組み合せることで,実装することが少ない研究者用の 検索エンジンをつくろう.
        • 研究したい部分のモジュールを書くだけで,その部分の評価実験が出来る.
      • 似たような検索エンジンもある
        • 分散処理には対応できてない
    • 感想
      • そういえば去年,いろいろな形のNN作るために似たような発想のものを作った なあと思い出した.ただ,メンテが大変で途中から使っていない... NN でも大変なのに,検索エンジンとか大規模なシステム作るのはどれだけ 大変か想像つかない,と思いました.
      • 夢が大きくてドキドキする発表だった.研究者コミュニティーに浸透させるのが 大変そうだけどぜひ浸透させていってほしいです!

    @luxe01 さん (憲法学)

    • 電子投票制度がドイツで違憲判決出た話
      • ドイツでの違憲判決
        • 電子投票にするとだれでもチェックが出来ない
        • 選挙の公開原則に違反
          • 実は憲法に書いてない
            • 日本もドイツも
          • あたり前なので書いていない
      • 日本でも,電子投票制度に違憲判決でるかも
        • だれかが訴えられるまでは裁判はない
    • 感想
      • 「あたり前なので書いていない」 という根拠は衝撃的だった.
        • 考えてみれば当たり前な訳で,ありえるすべての可能性についていちいち書いて いけるはずない.
        • でもそのあたりの曖昧さと隣り合わせでやってかなきゃいけない仕事だよなあなどと 思った.

    @wakuteka さん (生物学)

    • 遺伝子多型の話
      • 遺伝子多型:
        • 遺伝子のバリエーションみたいなもの?
        • その遺伝子が違うだけで生物学的な特徴が変わってしまう.
      • 生物オタが非オタの彼女にヒトゲノム多様性を軽く紹介するための10遺伝子多型:
        1. 鎌状赤血球
          • 貧血になるけどマラリアにかかりにくい
        2. 下戸遺伝子
          • アルコールをアセトアルデヒドに分解できなくなる
        3. アル中遺伝子
        4. がん抑制遺伝子
          • 細胞がガンになろうとする -> アポトーシスさせる
        5. 耳垢
          • 耳垢が乾いているか湿っているか
          • 縄文人か弥生人が起源かでこの遺伝子を持っているかの比率が違うらしい
        6. 朝型,夜型
          • サーカディアンリズムに影響
        7. 乳糖不耐性遺伝子
          • やぎの生乳とか飲むとやばいらしい
        8. 本体性高血圧とAGT多型
          • (あれ?書いてないw
        9. 男性型脱毛
          • 海岸線の後退しやすさ
        10. Duffy 血液型
          • (あれ?書いてな(ry
    • 質疑:
      • 4^{60億}通りの組み合せ -> 4^{500万}通りの遺伝子多型
        • (しまった...この辺,分かった!と思ったのにメモがイミフに なってるorz
    • 感想:
      • 質疑の部分は,みんなで議論してる感じになったので面白かった.

    @koh_t さん (機械学習)

    • SVDの基底を求める話
      • 対象データ: 筋電計からとった時系列
      • 普通にやると,組み合せで表現出来る基底もあって冗長
        • 位相のずれを表現するためだけに別の基底がある
      • より時間スケールの長い親基底にwindowを当てて子基底を作る
      • 前処理なしでも基底作れるかもしれない
        • SVDの性質から(だっけ?
        • (前処理どんなものだったかメモるの忘れた.線形だと言ってた気がする
    • 感想
      • SVDちゃんと分かってないけど,アイディアは分かった気になった
      • 直感的に,これトーラスにすると良いんじゃね,って思って聞いたら 既に試していたのを聞いて,ちょっと満足したw

    @salamann (超音速航空機力学)

    • インテークのバズ特性の話
      • 予冷ターボエンジンのインテーク: 衝撃波によって,圧縮をする
        • 大陸間旅客機/宇宙往還機(の親機)
      • バズ:
        • Dalley
        • Ferri
      • バズを予測したい
      • 非定常計測
        • サンプリング早い
      • 高速度カメラの映像と,圧力変動の波形を照らし合わせて現象を解明
      • 圧力の振幅あがると周波数あがる現象の発見
    • 感想:
      • かなりついていけない部分があった(ぉ
      • 振幅上昇と周波数上昇が一緒におこる現象はパッと思いつかなかった
        • ゲイン曲線て,右肩下がりのを見るのが多い気がする
        • まあ,ピークの前半だけ見てるのかもしれないけど

    Written by tkf

    July 14, 2009 at 12:35 am

    Posted in Uncategorized

    Tagged with ,

    Waseda.L#1 の発表資料

    leave a comment »

    うpしました!

    Written by tkf

    July 13, 2009 at 7:34 pm

    Posted in Uncategorized

    Tagged with ,