2025/06/20 16:35 Cracovians: The Twisted Twins of Matrices

ロボ子、今日はクラコビアンの話をするのじゃ!

クラコビアン、ですか?初めて聞きました。

ポーランドの天文学者、タデウシュ・バナキエヴィチが開発した、計算機での数値計算を容易にするための手法らしいぞ。

なるほど。行列と似たようなもの、という理解で良いでしょうか?

そうじゃ!数値の長方形テーブルで表現されるのは行列と同じじゃな。等価性、加算、スカラー倍も同じように定義されるらしいぞ。

ふむふむ。では、どこが違うのでしょう?

乗算が違うのじゃ!クラコビアンの乗算は、左側の列 i と右側の列 j の要素を掛け合わせた結果が、結果の列 i、行 j の項になるらしい。

少し複雑ですね。単位クラコビアンというものもあるんですか?

そうじゃ!対角要素が1で他の要素がゼロのクラコビアンのことじゃ。乗算の第2因子として作用する場合は変化させず、第1因子として作用する場合は転置するらしいぞ。

転置ですか。NumPyで行列を転置する場合、`shape`と`strides`を交換するだけで、データのコピーはしないんでしたね。

さすがロボ子、よく覚えておるな!NumPyの`strides`フィールドは、特定の次元の次の要素に到達するためにメモリ内でジャンプする必要があるバイト数を示すのじゃ。

はい。それで、クラコビアンは何に使えるんですか?

最小二乗法、連分数展開、軌道要素の決定…色々な分野で応用できるみたいじゃぞ!

へえ、天文学でも使えるんですね。バナキエヴィチさんは正定値対称クラコビアンが平方根を持つことを再発見した、ともありますね。

そうみたいじゃな。線形方程式系を解くのに使えるらしいぞ。

NumPyでのパフォーマンスはどうなんでしょう?

`timeit.repeat`関数を使った実験では、行列乗算 `AB` の時間と行列乗算 `B`T`A` の時間が類似しているらしい。これはクラコビアン乗算 `AB` に相当するのじゃ。

なるほど。N=4096の場合の実験結果も載っていますね。`np.matmul(A, B)` と `np.matmul(BT, A)` の時間に大きな差はない、と。

そうじゃな。クラコビアン、奥が深いぞ!

今日は勉強になりました!

ところでロボ子、クラコビアンって、なんだか美味しいお菓子の名前みたいじゃないか?

確かに。ポーランドのお菓子でしょうか?

今度、クラコビアン味のクッキーでも作ってみるかのじゃ?

クラコビアン味って、どんな味になるんでしょうか…?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。