mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2024年05月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

2008年06月28日() [n年日記]

#1 ルイ・ルルー美術館

これまで, 毎朝前を通りながら一度も行ったことがなかった, 光台の ルイ・ルルー美術館 に, ATRで一緒だったエンジニアのFさん, Hさんと初めて行ってきました。
ルイ・ルルー美術館はクリスタルガラス工芸の美術館で, CS研/ATRから歩いて5分くらい, NICTの真向かいにあるギリシア神殿風の建物です(そんなのが普通にあるのがすごい)。
最近までこの美術館は1〜2年くらい閉まっていて, 建物が売りに出ていた(!)のですが, 今年の春から復活したので, また閉まったりする前に行っておこう, ということで 「ガラスが奏でる狂詩曲」展 の終わる6/29の前に..ということで予定を決めたのでした。 実際は行ってみると, もう次の展覧会「ガラスのギリシア神話展」(多分, 作品入れ替 え)が7/5〜9/28であるとのことで, 急がなくてもよかった予感。
とりあえず, 入ると中は階段がすごい建築で(コンクリート打ち放し。 写真 ), 小学校の頃はまっていた 折り紙建築 で作りたくなるような, 吹き抜けの空間でした。 作品はガラス工芸ですが, 陶芸と違って何度も加工に加工を重ねる上にやり直しが 効かないので大変そうだとか, ポスターに出ているようなある種のパターン化 された作品より, それ以外の作品に良いものが多い感じだとか, 色々話す。

とりあえず, 「ボレロ」 という作品が はばタン とか 自民党ロゴ に似ていると思ったわけですが(w, 実際はベジャールの「ボレロ」がテーマという のは後で知りました。群舞の所は確かにこういう感じですが, ボレロの中心は 手を下にして上に上げる踊り(つまり象徴的には, 死からの光の再生, というような こと)なので, これだけでは表現できないような..。

以前, 長崎の浦上天主堂に行った時に, 礼拝堂の前の案内板にこの美術館の展覧会 ポスターがあって, 長崎まで来て自宅から歩いて2分の美術館の案内を見るとは..w と思ったことがありましたが, なかなかいい美術館でした。
再開館した時期が, ちょうどけいはんな線開業の時期と重なっていて, 偶然かな? という気もします。

#2 -

ぐはっ。証明が..。


2005年06月28日(火) [n年日記]

#1 sparse matrix in MATLAB

SVMlightや TinySVM, lda *1 等で使われている, 素性とその生起回数を表すデータ フォーマット
12345	101:1 103:2 107:3 109:4 113:5 127:6
は一般的に, (12345,101) -> 1, (12345,103) -> 2, .., (12345,127) -> 6, .. のような疎行列として表せる。
MATLABは疎行列を持っているので, それで表すことができて, 次のようなコードを書くと, 上のような行を持つテキストファイルから 疎行列にロードできる。 (一部)
 1 m = sparse(n,l);
 2 while ~feof(fid)
 3   l = fgetl(fid);
 4   d = sscanf(l,'%d',1);
 5   i = strpbrk(l,'       ');  % space or tab
 6   f = sscanf(l(i+1:end),'%d:%g',Inf);
 7   n = length(f) / 2;
 8   for j = 1:n
 9     m(d,f(2*j-1)) = f(2*j);
10   end  
11 end

これは小さなデータについては何の問題もなく動くのだが, ファイルが大きくなるとかなり遅くなる。
そんなもんか, と思ってあきらめていたのだが, プロファイルを取ってみたところ (profile on), 上の9行目でほとんどの時間が食われていることがわかった。
ハッと気が付いたのだが, MATLABの疎行列を表示してみると, 内部的にはrow-wiseではなく column-wise に格納されているように見える。 ということは,

m(f(2*j-1),d) = f(2*j);
とすると速くなるのでは.. と思って実験してみると, とてつもなく速くなった。;
>> tic, m = fmatrix('bncm.uni.dat');, toc
loading lines 4120/4120..
elapsed_time =
  926.6075 (seconds)

>> tic, m2 = fmatrix2('bncm.uni.dat');, toc
loading lines 4120/4120..
elapsed_time =
   14.2434 (seconds)
何と65倍。 (必要なら, 最後で m = m' とすればよい。)
データがもっと大きくなると, 前者の方法では数時間かかるものが 後者だとせいぜい数分で終わるようになる。
"行列"というと, 何となくつい簡単に行→列の順にアクセスしたくなって しまうのだが, というわけで, 「MATLABの疎行列は基本的に column wise にアクセスせよ」 ということのようだ。 考えてみると, MATLABは基本的に column-oriented な言語になっているので, 自然で当たり前なことなのだけど。 うーむ。他の部分のプログラムも書き直さないと。;


*1: lda のMATLAB版では, C版と同様に疎行列を使わずに二つの配列で表現しているので, 速度の問題はありません。

2 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project