theano の話

theano を使った時に、 ImportError で、 Library not loaded: libmkl_intel_lp64.dylib となるときがある(たぶん Anaconda とか Canopy を使ってる時)。

そしたら、libmkl_intel_lp64.dylib を探してやって、
export DYLD_FALLBACK_LIBRARY_PATH=[libmkl_intel_lp64.dylib があるディレクトリ]
とやればよい。
わたしの場合は /Users/[user_name]/anaconda/lib/libmkl_intel_lp64.dylib がそれだったので、

export DYLD_FALLBACK_LIBRARY_PATH=/Users/[user_name]/anaconda/lib

としたらエラーが解決した。

dict の話

スパースなベクトルを

a = {1:1, 2:5, 10:2}

みたいなdictで持ちたい時がある。Cython のコードの中で scipy.sparse を使うと、異様に要素の参照が遅く、dictの方が圧倒的に速いっぽいので。

こんなときに、a[3]とか、keyに入っていない要素を参照した時には0を返して欲しいけれども、この参照の仕方だと、エラーが返ってくる。

実は get(key, default) を適用すると、keyがない場合はdefaultの値を返してくれるようにできる。便利。

a.get(3, 0)

[Cython] [multiprocessing] Cython + multiprocessing の話

  • Foo/main.py
  • Foo/Bar/subBar.pyx
  • Foo/Bar/mainBar.py

みたいなディレクトリ構成で、中身は以下のような感じのときの話。

# main.py
from Bar import mainBar

bar = mainBar()
bar.bar()
# Bar/mainBar.py
from subBar import subFunc
import multiprocessing

class mainBar(object):
    def __init__(self):
        pass
    def bar():
        pool = multiprocessing.pool(4)
        result_list = []
        for input in range(4):
            result_list.append(pool.async_apply(subFunc, args=(input)))
        
        for i in range(4):
            print result_list[i].get()
# Bar/subBar.pyx
import cython

def subFunc(input):
    return input

要は、

  • main.py では Bar/mainBar.py のインスタンスを作って、そのインスタンスに対して bar() を適用
  • Bar/mainBar.py では Bar/subBar.pyx の関数を multiprocessing 経由で呼んでいる

という状況。

このとき、setup.pyは、main.pyと同じディレクトリにおいて、

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = [Extension("Bar.subBar", ["Bar/subBar.pyx"])]
)

と書いて、

python setup.py build_ext --inplace

でビルドするとちゃんと動いた。

ピッツバーグ

北京から帰って一日ダブリンで過ごした後、アメリカのピッツバーグに行った。たしか11月1日だったが、ダブリンはクリスマスの準備をしていた。ぶら下がってるのは電飾。
f:id:kanojikajino:20141031115118j:plain
出発の日のオコンネル橋からの眺め。早朝なので暗い。ここからバスに乗って空港へ行く。
f:id:kanojikajino:20141101062815j:plain

ダブリンの空港からアメリカへ行くときは、ダブリンの空港でアメリカの入国検査を受けるっぽい。その手続は早めにやっておいた方がいいので、空港でゆっくりするのは諦めて、さっさと搭乗スペースへ向かった。ピッツバーグへは特に問題なく着く。どうやらアメフトの試合がピッツバーグであるらしく、タクシーのおじさんには、アメフト行くのか?と聞かれる。

泊まったホテルはこんな感じ。結構古いホテルらしく、地下のバーは禁酒法時代にもあったとか。
f:id:kanojikajino:20141102083742j:plain

室内インターネットが有料だったので、ロビーでインターネットをしていたら、見知らぬおじさまに絡まれ、カードゲームをしたり飲んだりするなど。

街の観光名所は、街を見下ろせる山らしくて、そこへ行ってみようと思ったのだが、早朝に行ったらケーブルカーがまだ動いていなかったので、ケーブルカーの写真だけを撮った。
f:id:kanojikajino:20141102075711j:plain
あとは、まあ橋とか鉄道とか。
f:id:kanojikajino:20141102075414j:plain
古い小屋とか。1764年製だそうで。
f:id:kanojikajino:20141102082218j:plain

仕事で行ったのであんまり観光はしてないが、うまいビール飲んだり、そこそこうまいイタリアン食べたりはしました。
f:id:kanojikajino:20141104194257j:plain
f:id:kanojikajino:20141104200009j:plain


で、日本へ帰りました。帰りの便の出発時間が4時間くらい早くなったという連絡を当日の朝に貰ったり、てんやわんやでしたが、まあ普通に帰れました。よかったよかった。

北京

アイルランド滞在の最後の方に中国へ行く用事が入ってしまったので、泣く泣く北京へ行った時の話。
北京で二泊して、アイルランドへ戻って一日おいて出国というスケジュール。

ダブリンからフランクフルト経由で北京に行くはずが、フランクフルトへの飛行機がなかなか飛ばず、結局三時間くらい待って出発。

もちろん乗継便は出発していたので、代わりの飛行機を聞く。飛行機から降りたときに聞いたゲートに行くと、暗くて静かで人が来る気配もなく、怪しいと思ってルフトハンザのカウンターへ。一時間位待って聞いてみると、振替便がそろそろ出発しそうだけどギリギリ間に合うよ、頑張れば、とのこと。ターミナルすら違ったので、かなり急いで行くと、ギリギリ間に合った。ちなみに振替便はフランクフルトから直行便ではなく、イスタンブール経由。

イスタンブールへ行く飛行機は、機内食はわりとよかった。あと空いていたのは助かった。イスタンブールに着いたのは夜中だが、空港はとても賑やかで少し安心した。
f:id:kanojikajino:20141027203026j:plain

イスタンブールからはターキッシュ・エアラインズ。搭乗口には死ぬほど人がいて、これが中国か、と。この便は機材は結構古くて、あんまりターキッシュ・エアラインズの良さはわからなかった。

で、北京に夕方到着。空港から中心街は高速鉄道があるので移動はしやすい。高速鉄道の中のテレビ画面が故障寸前のクオリティだったり、地下鉄の自販機が壊れていてお札が入らなかったり、中国感を強く感じる。

はじめに宿泊するホテルに行こうとしたが、事前に調べていた場所ではないらしく、迷子状態に(ホテルは向こうの人にとってもらった)。ホテルを取ってもらった人に電話をしたらつながったので、なんとかなった。約束していた夕食のちょうど終わり際に来ることができて、急いで中華料理を食べる。ちなみに中華料理を食べたのはその日だけだった。コーラ、ちゃんと中国語パッケージだった。
f:id:kanojikajino:20141028193131j:plain

翌日は目的のイベント。昼はサブウェイとバーガーキング?が出てきた。夜は北京にいる友人と普通の飲み屋で飲む。ピザとか食べた。中華は食べてない。はじめは私が宿泊していた辺りで中華を食べようとしていたのだが、店が閉まっていて、タクシーも拾えないという状況になって、仕方なく白タクで近くの飲み屋街に向かうという体験をした。はじめに値段交渉をするんだけど、短距離だったというのもあって、通常の二倍くらい出さないと行ってくれなかった。

まあそんなこんなあって、三日目にはもう帰ります。空港へ向かう高速鉄道から撮影した写真がほぼ唯一の観光っぽい?写真なので載せますが、やはり大気は霞んでいました。喉ちょっと痛かったです。
f:id:kanojikajino:20141030074430j:plain

帰りの飛行機はルフトハンザ。今度はちゃんと時間通りに飛びました。めちゃくちゃ快適だったので、ルフトハンザ、リピートしたいところ。
f:id:kanojikajino:20141030092840j:plain

ちなみに、中国で自分で食べものを買ったのは、スタバのカフェモカだけでした。結構高いです。

モハーの崖ツアー

インターンの話が途中で切れていたのと、アイルランドが懐かしくなったので、覚えている出来事を書いておこうと思った次第。Cliffs of Moher に行った話。

Cliffs of Moher はアイルランドの西側にある崖で、アイルランドの中では随一の有名観光スポットっぽい。ダブリン発の日帰りバスツアーが出ているので、それを予約して行くことに。朝6時とかそのくらいに出発して、帰ってくるのが19時とかなので、かなりギリギリの日帰りツアー。

初めはリムリックに立ち寄ってジョン王の城を見る。まあ普通。リムリックは Frank McCourt のアンジェラの灰の舞台っぽいけど、そういう場所には立ち寄らず、モハーの崖へ。

12時前くらいにモハーの崖につくが、大雨&強風で何も見えない状態。モハーの崖と検索してくる写真の多くとだいたい同じ構図の写真を撮ったのが下の写真。ほんのり海と崖の境界線が見えるかと。
f:id:kanojikajino:20141026112140j:plain

レインコートをびしょびしょにしつつ何度か崖際に行ってみるが、景色的には何もわからなかったので、その後はビジターセンターで時間を潰す。

昼飯を食べにどこかレストランへ行く。サーモンを焼いたのにクリームソースをかけたものを食べる。うまいんだけど、じゃがいもが三種類付いているのはちょっとやり過ぎだよね。
イタリア人の夫婦と相席した。男性側は全然英語を喋れない様子だった。
f:id:kanojikajino:20141026124907j:plain

このあと、小さいモハーの崖的な場所へ行くことに。次第に雨がやんできて、そこへ着く頃には雨が止んでいた。
f:id:kanojikajino:20141026135106j:plain
f:id:kanojikajino:20141026135708j:plain
f:id:kanojikajino:20141026135500j:plain

ここは本当に良い所だった。モハーの崖自体もあまり柵とかなくて自然の状態を保とうとしているのだが、ここは道すらも整備されていなかったので、ほぼ自然の崖だった。岩と草とスカスカの石垣だけで、違う惑星にいるというのはこういうことかという感じ。スカスカの石垣、なんで崩れないのかなと思っていたのだが、スカスカだと風が通り抜けるからミッチリより長持ちするのかな?
場所は多分ここ

Google マップ - 地図検索


そのあとは、バスツアー恒例の教会めぐり。建物自体はもう機能していないけど、新しい墓があったりする。あと墓の前にはヒースが植えられていたりする。
f:id:kanojikajino:20141026145040j:plain
f:id:kanojikajino:20141026145809j:plain

このあと、休憩がてらチョコレートショップへ。The Burren Chocolatier というところ。こんなとこ誰も来ないだろというところにチョコレートショップ兼カフェがあってビックリ。周りは放牧場。
f:id:kanojikajino:20141026150836j:plain
f:id:kanojikajino:20141026151851j:plain

海藻入りのチョコレートがあったので、それを買ってみる。ちょっとしょっぱい感じがいいんだけど、海藻は乾燥していて硬いので、その点はイマイチ(ナッツ入りのチョコとかも同じ理由で嫌い)。
f:id:kanojikajino:20141026151522j:plain

最後はあまり良く知らない街でちょっと休憩してからダブリンに戻る、というコースでした。
モハーの崖の小さい版でも楽しめたので、このツアーよかったです。レインコートは必須です。