市來健吾の日記

プログラマ、(元)物理屋(ナノテク、流体)

「白ずくめ集団、長野県から再び岐阜県入り」 @asahi


  • これ、誰もおかしいと思わないのだろうか

    • これだけ警官をそっちに振り分けられる程、日本は平和ってことか

  • パナウェーブ研究所の人達と同じくらい、地元の人間も変だと思う (それを毎日 news にしている新聞も、 (それを毎日見ている人達も (うむ、自分もここに入るのかな…)))

    • 「各自治体では、朝から警戒態勢を取った」とか、 「国道わきの林道、村道など計11カ所にバリケードを設置し、 職員らで監視にあたった」とか、 「国道沿いの村道の入り口など23カ所に職員や消防団員ら約150人を置き、 警戒にあたった」とか

    • こっちの方がおかしいと思うし、恐いと思う

  • アザラシだって、どうだっていいじゃん (curiosity killed the cat.)

    • この集団が餌をやってるとかって話ではなくて、 氾濫している「アザラシ」ニュース全般についての話

    • 外に居るせいでい、この雰囲気形成の過程を共有していないせいだろうけど、 カルトの人達に対する感覚と同じものを感じます。

  • こういう下らないニュースって、目くらましかなと考えるのは、 邪推だろうか…

  • 1/19/2004 6/6/2003, 5/16/2003, 5/8/2003, 5/6/2003, 4/30/2003

「2003-05-06 第1111回 五味記者の件」 @torigoe


  • 「確かに戦場取材を体を張ってやったものにしか分らない、 記念に何かをもって帰りたい気持ちはあります。 僕もそういうことがありました。」

    • ……そういうもんか? (海外旅行に行って、ホテルのメモパッドとボールペンを持って帰るように?)

  • この話から「アメリカのやったこと」に結び付けるのは 一つの有意義な道だろうが、 今ここで彼がその話を出すのは「目くらまし」にしか見えない

  • それに、来るであろう批判を 「安全な日本から戦場にいた人物の軽率さはどれだけでも 自由に批判することはできますから」 と封じてるのには、失望

行列に関する(個人的な)混乱


  • ってのは

    • 中学(だったっけ)でも(つまり日本語でも) 行列の行と列は混乱していた

    • が、英語で row と column と言われると、その時点で頭が思考を放棄してしまう

  • 日本語と英語で縦横が入れ替わるという変換が頭に組み込まれているのが、 混乱の原因の一つだな

    • row ってのは横の並び(横長の長方形)、日本語の「行」

    • column ってのは縦の並び(縦長の長方形)、日本語の「列」

  • 数えるモノと、数えられるモノの混同も、また混乱に拍車を掛けている気がする

    • 行列の row の数ってのは、 「横の並びの数」で、行列の縦に何行あるかってこと

    • 行列の column の数ってのは、 「縦の並びの数」で、行列の横に何列あるかってこと

  • これでも too much なのに、 これに加えて、悪しき Fortran と C でのメモリの配列の違いが とどめを差す

    • n x m 行列 A を考える (「n 行 m 列の行列」)

    • Aij ってのは 日本語では「i 行 j 列の要素」ってことになる

      • A11 A12 A1m
        A21 A22 A2m
        : : :
        An1 An2 Anm

    • Fortran の a(i,j) は (A11, A21, …, An1, A12, …, Anm) っていうメモリ配列

      • これを column-major という ((縦)列を先に、と言う感じ)

      • だから a(i,j) は " j * m + i " 番目の要素

      • A ・ x は a [j * m + i] * x [j] みたいになる

    • C の a[i][j] は (A11, A12, …, A1m, A21, …, Anm) っていうメモリ配列

      • これを row-major という ((横)行を先に、と言う感じ)

      • だから a [i][j] は " i * n + j " 番目の要素

      • A ・ x は a [i * n + j] * x [j] みたいになる

      • 私は、 実際の code では、 2 次元配列なんか使わないで、 普通の 1 次元配列を(結果的に)上のように書いている

  • ってことで結論は、 誰かが schroedinger 音頭みたいに 行列音頭を作ればよいってことだな

  • 6/4/2008: FORTRAN のライブラリを C から使う事例の1つとして。

lapack の線形問題の解法 dgesv


  • 実務上何の問題でこんな下らないことまでたどっていったか、というと dgesv (atlas 版、つまり lapack の C 版の一種) での right-hand-side vector の定義

    • 一つの線形問題だけ解くのならば、まぁ何の混乱もない

    • 同じ係数行列の線形問題を複数解く時、 right-hand-side vector を 2 次元配列で渡すことが出来る

  • こいつは、一種の行列な訳なので、 素直に考えると以下のように書けると思う

    • Bij = AikXkj

  • Fortran 的に col-major で使う場合

    • clapack_dgesv (CblasColMajor, n, nrhs, a, n, ipvt, x, n);

    • これは以下に同値

      b [j * n + i] = Σk a [k * n + i] * x [j * n + k]

  • しかし、 C 的に row-major で使うと

    • clapack_dgesv (CblasRowMajor, n, nrhs, a, n, ipvt, x, n);

    • これが以下に対応しないのが、混乱の元

      b [i * nrhs + j] = Σk a [i * n + k] * x [k * nrhs + j]

      • まぁ、この用途で上のような b, x を使う奴はいない訳だが

    • これ (上の dgesv) は以下に同値

      b [j * n + i] = Σk a [i * n + k] * x [j * n + k]

  • まとめ

    • Fortran 的に使う分には行列表現を頭に描いていても問題ない

    • C 的に使う場合は、素直な行列表現を使わない

      • 言い替えると、 問題の index (上の j) は行列の足と思うな、というのが正しい