Fieldの構造#
Fieldは、型・Value本体・Shape・Dimension・Coordinate・Value Name・Attributeを別々に持ちます。型形式とデータごとの構造を混同しません。
整合条件#
Fieldの次元数をnとしたとき、次の関係を必ず満たします。
各軸iについてCoordinateのサンプル数はShape[i]と等しく、Valueのセル数はShapeの全要素の積です。VectorやColorの成分数はこの積に含めず、各セルの内部構造として扱います。
Shape:いくつあるか#
Shape<256,256,128>は各軸のサンプル数です。幅・高さ・時間などの意味は持ちません。各要素は0以上の整数です。0を含むFieldは空です。空のFieldを型として禁止しませんが、画像表示やGPU実行が空領域を受け付けない場合は、実行前に理由を示します。
セル数の計算で整数の範囲を超える場合や、保存量の上限を超える場合は、確保する前に拒否します。Shapeだけを変更してValueを増減させる操作はありません。再配置・切り出し・再サンプリングは、それぞれ値の対応を定める操作が必要です。
Dimension:軸は何を意味するか#
Gridでは、X,Y,Z、X,Y,Time、Distance,Wavelengthなど任意の名前を付けられます。同じField内で名前は重複できず、空文字も禁止します。名前の大文字・小文字は区別します。
順序は意味を持ちます。X,YとY,Xは自動的に同じ配列として接続しません。単に名前を変えても、Valueの転置や単位変換は起きません。軸を入れ替える操作はShape、Coordinate、Valueの対応も同時に変更する必要があります。
ImageはX,Y、VideoはX,Y,Timeの順序を要求します。Gridにはこの固定はありません。
Coordinate:各サンプルはどこにあるか#
一つのDimensionに一つのCoordinateがあります。座標値は有限の数値で、任意の単位名と参照基準を伴います。単位名を変えても自動で値を換算しません。未知の単位・参照基準は空で表します。
| 形式 | 保持内容 | 参照 |
|---|---|---|
| Regular / Implicit | start、step、count | start + i × step |
| Explicit | count個の座標値 | i番目の値 |
Regularの複数サンプルではstepは0にできません。GridとImageでは負のstepも許します。Explicitは不規則な配置を表現でき、単に並べたことから等間隔とはみなしません。重複位置や非単調な軸を受け付けるかは、利用する補間・探索操作の契約で追加制約を定めます。
VideoのTime座標は厳密な昇順です。可変フレームレートを固定フレームレートへ無断で並べ直しません。時間位置の一次情報はCoordinateであり、Frame Rate Attributeではありません。
座標値は、現在の記述形式では64bit浮動小数点数で保持します。これはValueのPrecisionとは別の、位置記述の精度です。巨大な開始値と非常に小さいstepの組合せには丸めがあるため、実際に区別できる位置であることも考慮してください。
Value Name:値の集合の名前#
density、temperature、pressure、maskなど、Field全体のValue集合に一つの名前を付けられます。省略は空文字です。セルごとの名前ではなく、Dimension名やソケット名とも独立です。Value Nameを変えても数値は変わりません。
Attributeと保存#
付随情報はすべてAttributeにまとめます。Type、Shape、Dimension、Coordinate、Value NameはAttributeへ移しません。
保存されたFieldは不変の値です。編集は新しいFieldを作る操作として扱い、整合しない中間状態を評価側へ公開しません。属性だけの変更ならValueの保存領域を共有できますが、共有されている元データを書き換えてはいけません。Data Wranglerも同じ規則です。