[次] [性急過ぎる ] [トップ ] [内容 ] [インデックス ] [ netCDFホームページ ] [ユニ‐データホームページ]

FortranのためのNetCDFユーザーのガイド

3データ


この章は、6つの原始的netCDFの外部のデータタイプ、netCDFインタフェースによってサポートされたデータアクセスの種類について論じ、そして、いかにデータがアレイより他のものを構造化するかは、netCDF datasetにおいて実行されるかもしれない。

3.1netCDFの外部のデータタイプ


netCDFインタフェースによってサポートされた外部のタイプは、以下である。
木炭 テキストを表すことのそのためのものである8ビットキャラクタ。
バイト 8ビット署名された、もしくは、署名されていない整数 ( 下の討論を見なさい ) 。
短い 16ビットは、整数に署名した。
int 32ビットは、整数に署名した。
フロート、または、実数 32ビットIEEE浮動少数点。
ダブル 64ビットIEEE浮動少数点。

これらのタイプは、適度に広い範囲の各値のために必要とされるビットのデータ精度、及び、数の間のトレード・オフを行うために、選択された。これらの外部のデータタイプは、どんな内部のデータが特別な機械、及び、言語結合によってサポートされても、から独立している。

これらのタイプは、「外部である」と考えられる。なぜなら、それらがnetCDFデータのためのポータブルの外部の表現と一致するからだ。プログラムが外部のnetCDFデータを内部の変数の中に読み取るとき、データは、指定された内部のタイプに必要なら変換される。同様に、あなたがnetCDF変数に内部のデータを書くならば、netCDF変数のための外部のタイプが内部のタイプと異なるならば、これによって、それは異なる外部のタイプに変換されるかもしれない。

外部の、そして内部のタイプの分離、及び、自動タイプ変換には、いくらかの利点がある。あらゆる所望の数値タイプ、もしくは、あらゆる所望の数値タイプへの自動変換が利用可能であるので、あなたは、外部のタイプの数値変数に気づいている必要がない。それを十分に広く内部のタイプを使う外部のタイプから独立した状態にすることによって、あなたは、コードを単純化するためにこの特徴を使うことができる、<例>、いくらかの異なる外部のタイプの数値netCDFデータのための倍精度。プログラムは、外部のタイプの変数に変更を合わせるために、変える必要がない。

外部の数値タイプ、もしくは、外部の数値タイプへの変換が必要であるならば、それは、ライブラリによって扱われる。新しい外部のタイプが11ビット値の自然の一致する内部のタイプ ( 例えば ) 満員の配置がないかもしれない満員のデータのために加えられるであろうとき、内部のデータタイプからの外部のデータ表現のこの自動変換、及び、分離は、netCDFの将来のバージョンにおいて更に重要になるであろう。

ターゲットタイプが変換された値を表すことが可能ではないならば、1つの数値タイプから別のものに変わることは、エラーに帰着するかもしれない。例えば、内部の短い整数タイプは、データを整数として外面に格納された状態に保つことができないかもしれない。一連の値にアクセスしているとき、1以上の値が再び‐人前へ出せる値の範囲が無いならば、範囲エラーは、返される、しかし、他の値は、適切に変換される。

タイプ変換における精度の単なる損失がエラーを返さないことに注目しなさい。このように、あなたが倍精度値を単精度浮動少数点変数 ( 例えば ) の中に読み取ったならば、倍精度値の大きさがあなたのプラットホームに再び‐人前へ出せる範囲の単精度浮動少数点番号を越えない限り、エラーは、生じない。同様に、あなたが大きい整数をその仮数において全てのビットの整数を表すことが不可能なフロートの中に読み取ったならば、精度のこの損失は、エラーに帰着しないであろう。あなたがそのような精度損失を回避することを望むならば、外部のタイプのあなたが十分な精度を持つ内部のタイプを使うことを確認するためにあなたがアクセスする変数を照合しなさい。

原始的な外部のデータタイプ ( バイト木炭短いintフロート、または、実数、及び、ダブル ) のための名前は、CDLにおける予約したワードである。従って、変数、次元、及び、属性の名前は、タイプ名であってはいけない。

それどちらでも署名した ( -128 〜 127 ) ので、バイトデータを翻訳するために、可能である、〜もしくは、署名されていない ( 0 〜 255 ) 。しかしながら、他の数値タイプに変換されるために、バイトデータを読んでいるとき、署名されたように、それは、翻訳される。

netCDFの外部のデータタイプ、及び、言語のデータタイプ間の一致のために Section 2.3「変数」、11 ページを見なさい

3.2データアクセス


netCDFデータにアクセスする ( 読んだ、もしくは書いた ) ために、あなたは、オープンnetCDF dataset、netCDF変数、及び、変数のエレメントを確認する情報 ( <例>、インデックス ) を指定する。アクセスファンクションの名前は、内部のタイプのデータと一致する。内部のタイプが外部のタイプと異なる変数の表現を持っているならば、データが読まれる、もしくは書かれるとき、内部のタイプ、及び、外部のタイプの間の変換は、行われるであろう。

アクセスデータに、直接的である、第1なしでは、どちらがあなたを意味するかは、能率的に大きいdatasetからデータの小さいサブセットにアクセスすることができる、それに先行するデータ全てにアクセスする。プログラムをデータフォーマット変更 ( 更に多くの変数をデータに加えることを必要とする ) に対して免疫の状態にして、変数を指定することによってデータを読んで、書くことが、ファイルにおけるポジションの代りにデータアクセスを他の変数がdatasetにおいてどのくらいであるかから独立した状態にする。

C、及び、FORTRANインタフェース、あなたがデータにアクセスすることを望むたびに、datasetsは、名前によって指定されない、しかし、その代りに、datasetが最初に作成される、もしくは開かれるとき、獲得されたdataset IDと呼ばれる小さい整数によって。

同様に、変数は、全てのデータアクセスのための名前によって同様に指定されるとは限らない。しかし、変数IDによって、小さい整数は、netCDF datasetにおいて各変数を確認したものだった。

3.2.1データアクセスのフォーム

netCDFインタフェースは、オープンnetCDF datasetにおいていくらかの形のデータ値へのランダムアクセスをサポートする。我々は、一般性を増加する順にアクセスの各々のこれらのフォームを描く:

4つのタイプのベクトル ( インデックスベクトルそれぞれカウントベクトルストライドベクトル、及び、インデックスマッピングベクトル ) は、変数の各次元のために1つのエレメントを持っている。このように、n‐寸法の変数 ( ランク= n ) のために、n‐エレメントベクトルは、必要とされる。その変数がスカラ ( 次元なし ) であるならば、これらのベクトルは、無視される。

アレイセクションは、2つのベクトルによって指定される「厚板」、または、接触している矩形のブロックである。インデックスベクトルは、最も起点に近いコーナーにおいてエレメントのインデックスを与える。カウントベクトルは、次元を変数のものの各々に沿った厚板のエッジの長さに与える、順番に。アクセスされた値の数は、これらのエッジ長さの製品である。

A追加のストライドベクトルがサンプリングを指定するために使われるということを除けば、サブ‐見本をとられたアレイセクションは、アレイセクションと類似している。このベクトルは、その次元に沿ってとられるためにストライドの長さを与える各次元のためにエレメントを持っている。例えば、4のストライドは、一致する次元に沿った値を全ての第4に加えるつもりである。アクセスされた値のトータルの数は、再びエレメントの製品である、の、ベクトルをカウントしなさい

Aベクトルをマップする追加のインデックスが1つがいかにnetCDF変数と関連していたデータ値がメモリにおいて取り決められるかを指定することを可能にするということを除けば、マップされたアレイセクションは、サブ‐見本をとられたアレイセクションと類似している。参照ロケーションからの各値のオフセットは、ベクトルをマップするインデックスの一致するエレメントによる各インデックス ( マッピングがなかったならば、使われるであろう架空の内部のアレイの ) の製品の和によって与えられる。アクセスされた値の数は、サブ‐見本をとられたアレイセクションに関しては同じである。

マップされたアレイセクションの使用について、更に十分に下で論じられる。しかし、最初に、我々は、更に一般に使われたアレイ‐セクションアクセスの例を提示する。

3.2.2アレイ‐セクションアクセスの例

みなす、netCDF dataset ( Section 2.1.2ネットワークCommon Data Form Language ( CDL ) 、9ページを 見る ) の我々の初期の例において我々が1つのレベル ( 意見、第2 ) のtemp変数のためにデータ全ての断面を読むことを望み、そして、現在3があると推測することは、netCDF datasetに記録する ( 時間値 ) 。それらの次元が定義される再現度



lat = 5、lon = 10、レベル= 4、時間=、無制限の;

そして、変数tempは、宣言される、〜同じくらい、



temp ( time、レベル、lat、lon ) を呈示しなさい;

CDL表記法において。

FORTRANにおいて、それらの次元は、最も速く変化する最初の次元によるCDL宣言、及び、レコード変数の最後の次元としてのレコード次元から逆転される。このように、FORTRAN、データを保持する変数のための宣言、わずか1つのレベルのために、である、



整数LATS、LONS、レベル、掛けるパラメータ ( LATS=5、LONS=10、LEVELS=1、TIMES=3 )
... .
真のTEMP ( LONS、LATS、レベル、掛ける )
〜、単に第2のレベル、全ての時代、全ての緯度、及び、全ての経度を表すデータのブロックを指定する、我々は、スタートインデックスを提供する必要がある、そして、約、長さを研ぐ。スタートインデックスは、そうであるべきである( 1、1、2、1 ) 、FORTRANで、なぜなら、スタートするために我々が望むからだ、の初めに、時間lon、及び、lat次元の各々、しかし、我々は、レベル次元の第2の値から始めることを望む。エッジ長さは、そうであるべきである( 10、5、1、3 ) 、FORTRANで、我々が全ての3つの時間値、わずか1つのレベル値、全ての5 lat値、及び、全ての10 lon値のためにデータを得ることを望むので。我々は、計150の浮動少数点を得るために値が戻った ( 3 * 1 * 5 * 10 ) 、そして、この多数に我々のアレイにおける十分な場所を提供するべきである、と予測するべきである。データが返されるであろうオーダ、である、に関して、最初の次元、最も速く変化するLON :



TEMP ( 1、1、2、1 ) TEMP ( 2、1、2、1 ) TEMP ( 3、1、2、1 ) TEMP ( 4、1、2、1 )

... .

TEMP ( 8 , 5 , 2 , 3 ) TEMP ( 9 , 5 , 2 , 3 ) TEMP ( 10、5、2、3 ) 、
異なるC、FORTRAN、及び、他の言語インタフェースの次元オーダは、ディスクに格納される値の異なるオーダを反映しない、しかし、単に、言語への手続き的インタフェースによってサポートされた異なるオーダ。概して、netCDF datasetがC、FORTRAN、または、他の言語インタフェースを用いて書かれるかどうか問題とならない;あらゆるサポートされた言語から書かれたnetCDF datasetsは、他のサポートされた言語で書かれたプログラムによって読まれるかもしれない。

3.2.3更に多くのオンの一般的なアレイセクションアクセス

マップされたアレイセクションの使用は、変数エレメントのディスクアドレス、及び、それらがメモリに格納されるアドレスの間のささいでない関係を許す。例えば、メモリにおけるマトリックス、である、置き換える、全く異なるオーダをするディスク上のそれのうちで、エレメントのうちで。規則的なアレイセクションにおいて、ディスク、及び、メモリアドレスの間のマッピングは、ささいである:不メモリ値 ( すなわち、寸法の長さ、及び、それらのオーダ ) の構造は、アレイセクションのそれと同じである。マップされたアレイセクションにおいて、しかしながら、ベクトルをマップするインデックスは、netCDF変数エレメントのインデックス、及び、それらのメモリアドレスの間でマッピングを定義するために使われる。

マップされたアレイアクセスに関して、記憶‐居住者アレイの起点から特別なポイントまでのオフセット ( アレイエレメントの数 ) は、与えられる、ポイントのものを対等の状態にしてベクトルをマップするインデックスの内積 [1]は、ベクトルを相殺した。Aポイントの対等のオフセットベクトルは、含んでいるアレイの起点からポイントまで各次元のためにオフセットを与える。FORTRANにおいて、ポイントのものの一致する値がベクトルを統合するより、ポイントの対等のオフセットベクトルの値は、あまり1つではない、<例>、アレイエレメントA ( 3,5 ) は、対等のオフセットベクトル[ 2、4 ]を持っている。

規則的なアレイセクションのためにベクトルをマップするインデックスは、一定の1を持っている--順番に、次元を最も急速に変えることから、に、最もゆっくりと--、アレイセクションの最も急速に変化している次元のエッジ長さを持つその値の製品、その時、次に最も急速に変化している次元のエッジ長さを持つその値の製品等。マップされたアレイにおいて、しかしながら、netCDF変数ディスクロケーション、及び、メモリロケーション間の一致は、異なり得る。

マップされたアレイアクセスの詳細な例は、マップされたアレイアクセスのためのインタフェースの記述において提示される。 セクション7.9は、「マップされた一連の値: NF_PUT_VARM_typeを書く」のを見る、62 ページ

それに注目する、 ( netCDF抽象がそこでサブ‐見本をとられた、もしくは、マップされたアレイ‐セクションアクセスの使用を可能にするが、使用が必要とされない ) 。あなたがこれらの更に一般的な形のアクセスを必要としないならば、あなたは、これらの能力を無視し、そして、その代りに1つの値アクセス、または、規則的なアレイセクションアクセスを使うかもしれない。

3.3タイプ変換


各netCDF変数は、外部のタイプを持っている ( その変数が最初に定義されるとき、指定されて ) 。データがテキスト、または、数値のためのものであるか否かに拘らず、そして、数で表されているならば、この外部のタイプは、決定する、数値の範囲、及び、精度。

変数のためのnetCDFの外部のタイプが木炭であるならば、テキストストリングを表すキャラクタデータのみが、書かれる、もしくは、変数から読み取られ得る。テキストデータの異なる表現への自動変換は、サポートされない。

そのタイプが数で表されているならば、しかしながら、netCDFライブラリは、あなたが異なるタイプとして変数データにアクセスすることを可能にし、そして、メモリにおける数値データ、及び、netCDF変数におけるデータの間の自動変換を行う。例えば、あなたが倍精度浮動少数点値として数値データ全てを扱うプログラムを書くならば、あなたは、外部のタイプのnetCDF変数が何であるかを知る、もしくは気にせずにnetCDFデータを倍精度アレイの中に読み取ることができる。netCDFデータ、様々なサイズの整数、及び、単精度浮動少数点を読んで知ることに基づいて、あなたが倍精度値のためにデータアクセスインタフェースを使うならば、値は、倍精度に全て変換されるであろう。もちろん、あなたは、値タイプ ( 外部のデータタイプの各netCDF変数と一致する ) のためにnetCDFインタフェースを使うことによって自動数値変換を回避し得る。そこで、そのような値タイプは、存在する。

netCDFによって行われた自動数値変換は、理解し易い。なぜなら、それらが異なるタイプの変数にちょうど1つのタイプのデータの割当のように作用するからだ。例えば、あなたが浮動少数点netCDFデータを整数と読み取ったならば、ちょうど、それがあなたが浮動少数点値を整数変数に割り当てたかどうかであるように、その結果は、ゼロの方へ切り捨てられる。そのようなトランケーションは、数値変換において発生し得る精度の損失の例である。

ターゲットタイプが変換された値を表すことが可能ではないならば、1つの数値タイプから別のものに変わることは、エラーに帰着するかもしれない。例えば、整数は、データをIEEE浮動少数点番号として外面に格納された状態に保つことができないかもしれない。一連の値にアクセスしているとき、1以上の値が再び‐人前へ出せる値の範囲が無いならば、範囲エラーは、返される、しかし、他の値は、適切に変換される。

タイプ変換における精度の単なる損失がエラーに帰着しないことに注目しなさい。例えば、あなたが倍精度値を整数の中に読み取ったならば、倍精度値の大きさがあなたのプラットホームに再び‐人前へ出せる範囲の整数を越えない限り、エラーは、生じない。同様に、あなたが大きい整数をその仮数において全てのビットの整数を表すことが不可能なフロートの中に読み取ったならば、精度のこの損失は、エラーに帰着しないであろう。あなたがそのような精度損失を回避することを望むならば、外部のタイプのあなたが互換性がある精度を持つ内部のタイプを使うことを確認するためにあなたがアクセスする変数を照合しなさい。

範囲エラーが再び‐人前へ出せる値の境界の近くで大きい浮動少数点値を書く際発生するか否かに拘らず、である、プラットフォームに依存する。あなたがnetCDFフロート変数に書き込むことができる最も大きい浮動少数点値は、第128のパワーに2未満であるあなたのシステム上の再び‐人前へ出せる最も大きい浮動少数点番号である。あなたが二重の変数に書き込むことができる最も大きい倍精度値は、第1024のパワーに2未満であるあなたのシステム上の再び‐人前へ出せる最も大きい倍精度数である。

新しい外部のタイプが自然の一致する内部のタイプ ( 例えば ) がない満員のデータのために加えられるであろうとき、内部のデータタイプからの外部のデータ表現のこの自動変換、及び、分離は、netCDFの将来のバージョンにおいて更に重要になるであろう、11ビット値の配置。

3.4データ構造


netCDF抽象によって直接サポートされたデータ構造の種類のみが、付属のベクトル属性を持つ指定されたアレイの収集である。NetCDFは、特に連結されたリスト、木、希薄なマトリックス、ぼろぼろのアレイ、または、他の種類のポインタを必要とするデータ構造を格納することに良く‐適していない。

他のアレイへのポインタとして1つのアレイにおいてデータの使用に関する様々な会議を採用することによって他の種類のデータ構造をアレイのセットで作ることは、可能である。netCDFライブラリは、そのようなデータ構造を組み立てることによってあまりヘルプ、及び、妨害を行わないであろう。しかし、netCDFは、そのような規定が設計され得るメカニズムを供給する。

例に従うことは、関連するインデックスを各行のスタートのインデックスを与える変数と命名するために属性のrow_indexを使うぼろぼろのアレイragged_matを格納する。この例において最初の行は、12のエレメントを含む、第2の行は、7つのエレメント ( 19 - 12 ) を含む、等。



ragged_mat ( max_elements ) を呈示しなさい;
ragged_mat:row_index =「row_start」; int row_start ( max_rows ) ; data : row_start = 0 , 12 , 19 , ... .
として、他の例、netCDF変数は、スペース、または、コンマのような従来のデリミッターによって分離された各グループに変数の名前をリストする属性を定義することによってnetCDF datasetの中で集められるかもしれない。そのような分類のための属性名前のためにネーミング規定を使うことは、変数の指定されたグループのあらゆる数を可能にする。各変数のための特別な従来の属性は、それがメンバーであるグループの名前をリストするであろう。属性の使用、または、他の属性、または、変数を参照する変数は、netCDF datasetsにおいていくらかの種類の複合的構造を表すために柔軟なメカニズムを供給する。


[1] 2つのベクトルの内積は、[ x0、x1、...、xn ]、そして、[ y0、y1、...、yn ]単にx0*y0 + x1*y1 + ...である。+ xn*yn .
3.1 - netCDFの外部のデータタイプ
3.2 -データアクセス
3.2.1 -データアクセスのフォーム
3.2.2 -アレイ‐セクションアクセスの例
3.2.3 -更に多くのオンの一般的なアレイセクションアクセス
3.3 -変換をタイプする
3.4 -データ構造

FortranのためのNetCDFユーザーのガイド- 1997年6月4日
[次] [性急過ぎる ] [トップ ] [内容 ] [インデックス ] [ netCDFホームページ ] [ユニ‐データホームページ]