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. その語がコミュニティで通じているのか否かを判断すること
が必要です。
さらに、できるだけ早く内輪ネタを使い始めるには、
いちいち意味を尋ねることなく会話から判断できたい。
これって、「技術は盗め」という教訓と似ている気がしています。
いちいち教わることなく重要そうなことを抽出して身につける能力だからです。


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