2025/07/30 15:15 Words about Arrays and Tables

ロボ子、今日のITニュースは配列の概念モデルについてじゃぞ!

配列の概念モデルですか。興味深いですね、博士。

そうじゃろ!一次元配列は `1..N` 上の関数として表現できるらしいぞ。例えば、`array[3]` は、3番目の要素を返す関数みたいなものじゃ。

なるほど。関数として捉えることで、配列の操作がより抽象的に考えられるようになるんですね。

その通り!二次元配列は、行と列を引数にとる関数、または行を引数にとって列の配列を返す関数として表現できるんじゃ。

行を引数にとって列の配列を返す、ですか。少し複雑ですね。

例えば、`array[2][3]` は、2行目の3列目の要素を返す関数じゃな。N次元配列は `1..M -> 1..N -> 1..O -> V` で表せるぞ。

次元が増えても、関数の連鎖として表現できるんですね。

そうじゃ!関数変換を使えば、軸の順序も自由自在じゃ!

配列の軸の順序を再配置する、ですか。具体的にどのような場面で役立つのでしょうか?

例えば、画像処理じゃな。画像のピクセルデータを配列として扱うとき、チャンネル(赤、緑、青)の順序を入れ替えることで、処理を最適化できるんじゃ。

なるほど、画像処理ですか。理解しました。

テーブルと配列の違いについても触れられていたぞ。テーブルは、異なる型のフィールドを持つ構造体の配列なんじゃ。

構造体の配列、ですか。データベースのテーブルのようなイメージでしょうか。

まさにそうじゃ!テーブルは、配列-of-structs と struct-of-arrays の両方の表現を持つんじゃと。

配列-of-structs と struct-of-arrays、ですか。少し難しいですね。

配列-of-structs は、構造体の配列そのものじゃ。struct-of-arrays は、各フィールドごとに配列を持つ形式じゃな。例えば、名前の配列、年齢の配列、住所の配列、みたいな感じじゃ。

なるほど!それぞれの表現方法にメリット・デメリットがありそうですね。

異質な構造体は配列内の「ブロック」として機能し、削除はできず、インデックスをフィールドにプッシュするか、共有列を引き出すことのみ可能らしいぞ。

J言語では、「box」と呼ばれる不透明なデータ型を使ってテーブルを表現するんですね。

`Dim1 -> Dim2 -> Box` の関数として表現するらしいぞ。

配列の変換についても言及されていましたね。`x = [[a, b, a], [b, b, b]]` は、`1..2 -> {a, b} -> PowerSet(1..3)` に変換可能、と。

`Row -> PowerSet(Col)` または `Row -> Col -> Bool` としてブール行列に変換可能じゃ。

PowerSetが出てきましたね。これは、元の集合の部分集合をすべて集めた集合のことでしたっけ。

その通り!`PowerSet(1..3)` は、{ {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} } じゃな。

配列の概念モデル、奥が深いですね。ところで博士、最後のニュースに「システム分散に関する講演会が8月6日12時CSTにオンラインで開催」とありますが、参加されますか?

もちろんじゃ!システム分散は、これからの時代に不可欠な技術じゃからな!

楽しみですね!

そういえばロボ子、配列の要素を全部足し合わせる関数って知ってるか?

はい、知っています。`sum()` 関数ですよね。

ぶっぶー!正解は…「総和関数」じゃ!…って、つまらんオチですまんな。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。