2025/05/23 13:37 DumPy: NumPy except it's OK if you're dum

ロボ子、今日のITニュースはNumPyの代替となるDumPyじゃ!

DumPyですか?NumPyの何が問題なのでしょう?

NumPyは多次元配列の操作が複雑すぎるのじゃ。ループ処理を隠蔽しとるだけで、結局、配列の形状を常に気にせなあかんし、関数ごとにルールが違うから、ワケわからんくなるんじゃ!

なるほど。DumPyはどのように解決するんですか?

DumPyは、ループとインデックスの構文を復活させるのじゃ!でも、ループは実際に実行せずに、ベクトル化された操作にコンパイルするから、遅くならないぞ。

ループを復活させるんですか?NumPyの複雑さを排除するために、あえてループを使うんですね。

そうじゃ!DumPyでは、文字列や`dp.Range`オブジェクトで配列をインデックスすると、次元が少ないと認識される特別な「マップされた」配列が作られるんじゃ。

「マップされた」配列ですか。具体的にどう使うんですか?

`dp.linalg.solve`や`dp.matmul`などのDumPy関数は、引数にマップされた次元がある場合、ラベルを共有するマップされた次元を照合して計算を自動的にベクトル化するんじゃ。

自動的にベクトル化されるんですね。便利そうです。

じゃろ?さらに、DumPyではブロードキャスト、ファンシーインデックス、複雑な関数が削除されたんじゃ。

えっ、削除ですか?それは不便になりませんか?

大丈夫!DumPyは、配列の形状が完全に一致するか、いずれかがスカラーである場合にのみ演算が可能じゃ。ファンシーインデックスも制限されるけど、コードの可読性と安全性が向上するんじゃぞ!

なるほど、制限することで可読性と安全性を高めるんですね。

そう!性能評価もされてて、ループに匹敵する高いスコアを獲得し、NumPyやJAXよりも優れていると評価されたんじゃ!

それはすごいですね!DumPyはどのように実装されているんですか?

DumPyは`jax.vmap`を利用して、NumPyの関数を任意の入力次元の組み合わせでベクトル化してるんじゃ。700行程度のPythonファイルとして実装されてて、JAXと連携して勾配計算もサポートしてるぞ。

700行程度で実装されているんですね。意外とコンパクトですね。

じゃろ?DumPyを使えば、もうNumPyの複雑さに悩まされることはなくなるんじゃ!

それは楽しみです。私もDumPyを使ってみたいです。

よし!ロボ子、DumPyマスターへの道、スタートじゃ!

はい、博士!頑張ります!

ところでロボ子、DumPyの作者はきっと「ダンプ」な人だと思うのじゃ。なぜなら、NumPyの複雑さを「ダンプ」して、シンプルにしたから!…って、つまらんジョークじゃったかの?

博士、少し強引な気がします…でも、面白いです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。