3.3 配列の特徴量
以下の3次元配列m
について考えよう。
m ← 2‿3‿5⥊0
┌─
╎ 0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
┘
m
には3つの軸があり、その全てを指定することで要素0
にアクセスできる。
言葉を補って、
3軸(その定義域は\([0,2), [0,3), [0,5)\))を添字として1回指定することで要素を得る。
と言い換え、このことから、
- 3軸あることからrank(
=
)を3 - その定義域からshape(
≢
)を⟨2, 3, 5⟩
- 添字を1回指定することからdepth(
≡
)を1
と表現する。
=m # rank
3
≡m # depth
1
≢m # shape
⟨ 2 3 5 ⟩
depth
要素がatomになってない以下の3次元配列n
の形状について考える。
n ← 2‿3‿5⥊<"abcdef"
┌─
╎ "abcdef" "abcdef" "abcdef" "abcdef" "abcdef"
"abcdef" "abcdef" "abcdef" "abcdef" "abcdef"
"abcdef" "abcdef" "abcdef" "abcdef" "abcdef"
"abcdef" "abcdef" "abcdef" "abcdef" "abcdef"
"abcdef" "abcdef" "abcdef" "abcdef" "abcdef"
"abcdef" "abcdef" "abcdef" "abcdef" "abcdef"
┘
先ほどと同様にn
に対して添字を1回指定することで要素"abcdef"
にアクセスできるが。
これは文字列すなわち文字型の1次元配列である。
従って要素を得る過程は以下のように表現される。
3軸を1回指定することで配列の要素にアクセスできる。
1‿1‿1⊑n
"abcdef"
さらに要素である文字列に対して1つの軸(その定義域は\([0,6)\))を1回指定することでatomである文字型データを得ることもできる。
3⊑1‿1‿1⊑n
'd'
1‿1‿1‿3⊑n # 4次元配列ではない
Error: ⊑: Picking item at wrong rank (index 1‿1‿1‿3 in array of shape 2‿3‿5)
at 1‿1‿1‿3⊑n
^
そこで、配列の形状や添字は先のm
と変わらないが、
- 添字を最大2回指定できる(この時得られるデータはatomである文字型)ことからdepthは2
となる。
=n # rank
3
≡n # depth
2
≢n # shape
⟨ 2 3 5 ⟩
≡m # depth of m
1
配列と文字列の間に単位配列が入っていて、そのことを考慮しなければいけないように思うかもしれない。
しかし、このn
は文字列"abcdef"
が入った単位配列をreshape(⥊
)で2次元配列へ変換したものであり、n
の中には単位配列は存在していない。
𝕨⥊<𝕩
は𝕩の入った単位配列を並べるためのideomではなく、(atomかどうかに関わらず)𝕩を並べるためのものである。
n
が4次元配列にならない理由も𝕨⥊<𝕩
という変換方法から来ている。
そうしたい場合には明示的に文字列をshape2‿3‿5‿6
へreshape(⥊
)することが必要なようである。
例1
式 | = | ≠ | ≡ | ≢ | 注釈 |
---|---|---|---|---|---|
1 | 0 | 1 | 0 | ⟨⟩ | a base data type |
<1 | 0 | 1 | 1 | ⟨⟩ | a unit array |
7‿8‿9 | 1 | 3 | 1 | ⟨3⟩ | a list, 1D array |
<7‿8‿9 | 0 | 1 | 2 | ⟨⟩ | a unit array of list |
7‿8‿9≍7‿8‿9 | 2 | 2 | 1 | ⟨ 2 3 ⟩ | 数値を要素に持つ2次元配列 |
⟨0⟩‿⟨1⟩‿⟨2⟩)≍(⟨0⟩‿⟨1⟩‿⟨2⟩) | 2 | 2 | 2 | ⟨ 2 3 ⟩ | 2次元配列の中に配列 |
例2: 要素の参照
l ← ⟨0⟩‿⟨1⟩‿⟨2⟩)≍(⟨3⟩‿⟨4⟩‿⟨5⟩)
┌─
╵ ⟨ 0 ⟩ ⟨ 1 ⟩ ⟨ 2 ⟩
⟨ 3 ⟩ ⟨ 4 ⟩ ⟨ 5 ⟩
┘
式 | = | ≠ | ≡ | ≢ | 返値 |
---|---|---|---|---|---|
0⊏l | 1 | 3 | 2 | ⟨3⟩ | ⟨ ⟨ 0 ⟩ ⟨ 1 ⟩ ⟨ 2 ⟩ ⟩ |
0‿1⊏l | 2 | 2 | 2 | ⟨ 2 3 ⟩ | これはビックリその1 |
1‿2⊑l | 1 | 1 | 1 | ⟨ 1 ⟩ | ⟨5⟩ |
2⊏1⊏l | 0 | 1 | 2 | ⟨⟩ | これはビックリその2 |
⊑⊑2⊏1⊏l | 0 | 1 | 0 | ⟨⟩ | 5 |
これはビックリその1
1‿2
は二つの軸を指定しているのではなく、範囲を指定している。
┌─
╵ ⟨ 0 ⟩ ⟨ 1 ⟩ ⟨ 2 ⟩
⟨ 3 ⟩ ⟨ 4 ⟩ ⟨ 5 ⟩
┘
これはビックリその2
⊏は取り出さないのでunitになった
┌·
· ⟨ 5 ⟩
┘