2013年2月19日火曜日

Python: 多次元 array の argmax

多次元の numpy.array の argmax を求めたい時は以下のようにする。

import numpy
x = [numpy.array object]
numpy.unravel_index(x.argmax(), x.shape)


なぜ?
x.argmax() は、1次元行列に変換した時の位置を返す。
numpy.unravel_index は一次元に変換した時の位置と行列の次元からその行列でいうとどの位置かを計算する。
これらを組み合わせると、もとの行列の何行何列目に最大値があるのかが分かる。

2013年2月14日木曜日

parallel で並列処理

ちょっと必要になったので並列処理してみた。


たとえば、
html ディレクトリ以下のすべての .html 拡張子を持つファイルの行数を表示する。
ただし、行数を表示するたびに1秒待つ (重い処理を想定)


find で処理するためには、よくこんな感じで処理してました。
find html -name "*.html" -printf "wc -l %p; sleep 1" | sh
find コマンドが、以下のようなスクリプトを生成してくれるので、
wc -l html/aaa.html; sleep 1
wc -l html/bbb.html; sleep 2
...
それをパイプで sh に渡します。

短い場合はこれでいいんですが、ファイル数が多いなどの時間がかかる場合は
並列処理したくなります。

そこで parallel.
上と同じことを 10 並列でする場合は、以下のような感じ
parallel -j 10 -i sh -c "wc -l {}; sleep 1" -- `find html -name "*.tex"`
 -- 以下のリストを順番に {} に代入して、並列で実行してくれます。

2013年2月7日木曜日

内輪ネタ

下書き。要推敲



あるコミュニティ内では通じるが、外では語彙 (jargon) とかエピソードのことを
内輪ネタと定義します。

で、自分がそのコミュニティに入ったときから何発話目で
そのコミュニティの内輪ネタを理解し、話せるようになるかというのは
結構いろんなところで役立つんじゃないかと思います。
という話。


早く内輪ネタを理解し、話せるようになる効用は次の通りな気がします。
1. コミュニティに馴染むのが早くなる

2. 内輪ネタの階層化
   その内輪ネタがそのコミュニティ特有なのか、より一般的なのかが分かる。


3. 人の話の理解が早い
   最も小さいコミュニティを個人と定義すると、相手個人の内輪ネタがわかれば
   内容理解にリソースを割ける。

4. 本を読む時の理解が早い


   著者の使う表現や語彙に適応できるので、内容理解にリソースを割ける。

5. 別コミュニティの内輪ネタとの類推が可能
   そのコミュニティの性質がわかるかも。
   受けそうな内輪ネタを作れる。

6. 自分の「常識」が本当は違うことが理解できる
   当然知ってるべき「常識」は単なる内輪ネタだったりするかも




これができるためには、
1. 周りの人の会話から「理解できない語・表現」を見つけ出すこと
2. その語の用法と意味を文脈から理解すること
3. その語がコミュニティで通じているのか否かを判断すること
が必要です。
さらに、できるだけ早く内輪ネタを使い始めるには、
いちいち意味を尋ねることなく会話から判断できたい。
これって、「技術は盗め」という教訓と似ている気がしています。
いちいち教わることなく重要そうなことを抽出して身につける能力だからです。


じゃあどうすればいいか?
わからん。

2013年1月29日火曜日

[shell] # から始まる行を全部消して表示


targetfile というファイルの、先頭が # から始まる行を全部消してみたいとき。
設定ファイルとか、 Julius の .jconf ファイルとか。

cat targetfile | grep -v "^#" | sed "/^$/d" | lv

全部表示して、 # から始まる行を取り出して、空白行を削除。

2013年1月13日日曜日

国防の常識

久しぶりのハズレをひいた。
最近の情勢について色々書いているんだけれども、
そのどれにもリファレンスが付いていないのでそれが事実かもわからないし、
記されている"事実"からの結論にもだいぶ冷静でない感じがした。

前に読んだ戦争の常識は結構冷静に書いていたのに、
今回は思い入れが強すぎるのだろうか。
なんだか週刊誌を読んでいる気分だった。

2012年12月29日土曜日

Octave で PsychToolbox を動かす

はじめに

PsychToolbox という、 MATLABで動く心理学実験用ツールボックスがあります。
http://psychtoolbox.org/wikka.php?wakka=HomePage
最新版はバージョン3 。

日本語解説はこちら。
https://sites.google.com/site/ptbganba/


で、この PsychToolbox はフリーのMATLAB互換ソフト Octave でも動くらしい
ということで動かしてみました。


Octave on Windows で動かす

どうやらバージョンに結構依存するらしいので、最新版ではうごかないっぽいです。
少なくとも、 Windows 7 で以下は動きました。

1. Octave のインストール

最新の Octave 3.6.x では動かないようです。
そこで、3.2.4 をインストール。
http://sourceforge.jp/projects/sfnet_octave/downloads/Octave%20Windows%20binaries/Octave%203.2.4%20for%20Windows%20MinGW32%20Installer/Octave-3.2.4_i686-pc-mingw32_gcc-4.4.0_setup.exe/
これをダウンロードして、とりあえず全部入れる感じで。

インストールパスは C:\Octave になりました。

2. GStreamer のインストール

PsychToolbox は全画面で色々表示したりするので、そのライブラリが必要でうs。
具体的には次のライブラリをインストールします。
http://code.google.com/p/ossbuild/downloads/detail?name=GStreamer-WinBuilds-GPL-x86-Beta04-0.10.7.msi

3. QuickTime のインストール

QuickTime をインストールします。

4. TortoiseSVN のインストール

最新版を入れます。これは PsychToolbox の最新版をダウンロードするためです。
http://tortoisesvn.net/downloads.html

5. PsychToolbox のダウンロード

PsychToolbox は svn で公開されているので、落とします。

C:\Octave\3.2.4_gcc-4.4.0 を開いて右クリックして、 SVN Checkout を選びます。
で、
URL of repository に
http://psychtoolbox-3.googlecode.com/svn/beta/Psychtoolbox/
を入力して、 OK をクリック。するとぶわーっとダウンロードされます。

6. PsychToolbox の設定

初期設定がいるので、 Octave を開いてそれを実行します。
初期ディレクトリは C:\Octave\3.2.4_gcc-4.4.0\bin なので、

cd ..
cd Psychtoolbox
SetupPsychtoolbox 
でなんか実行されます。

7. libusb2.0 をインストール

PsychHID という関数などは、 libusb が無いといわれる。
そこで、
C:\Octave\3.2.4_gcc-4.4.0\Psychtoolbox\PsychContributed\
以下にある、
libusb-1.0.dll
を 
C:\Windows\system32 
にコピーしてあげるとうごく。

8. Demo とか動かしてみる

Octave を再起動するとパスが通っているので、
DotDemo
とか実行してみて、全画面で PsychToolbox とか表示されていればインストール終了。

plot 出来ない問題

このままだと、 Octave で
plot([1, 2, 3])
とかを実行してもグラフが表示されません。isstr が obsolete だとか言われます。

そこで、以下を実行してplot周りの問題を解決します。
pkg rebuild -noauto oct2mat

参考 URL:
http://octave.1599824.n4.nabble.com/warning-message-in-Octave-3-2-4-td3311391.html


2012年12月28日金曜日

Brython ことはじめ

概要

Python でブラウザ上で動くプログラムを書く javascript ライブラリ。
@qwerty__ に教えてもらった。
記事はこれかな。 http://www.moongift.jp/2012/12/20121227/


で、という感じで python をインタプリトしてくれる javascript が
brython らしい。

ざっと見た感じ

オフィシャルサイトはここ。
http://www.brython.info/index_en.html

tgz を解凍すると色々出てくる。
カレントディレクトリに brython ディレクトリを作って、その直下に全ファイルがあるとする。

カレントディレクトリで動く最小構成の HTML はこれ。




brython test








最初の script で brython.js を読み込んで、 bodyの onLoad で brython() を実行することで
初期化してるっぽい。
alert の中身をフォーマット文字列にしてちょっと python ぽくしてみた。

brython.js を読んでみたところ、標準で呼べるモジュールはこれらしい。

'time','datetime','dis','math','random','sys'


他にも、 DOM 触ったり、local strage 触ったり、できるみたい。
トップページの時計は、 canvas に draw しまくることで実現しているようだ。

今度なんか作ってみよう。