FAST ASCII I/O¶
そして当を受ける. astropy.io.ascii
設計時には柔軟性とスケーラビリティを考慮しているが,ASCIIファイルを読み書きするCython/Cエンジンの柔軟性は低いが,はるかに高速である.デフォルトの場合、 read()
そして write()
互換性のあるフォーマットを処理する際に、このエンジンの使用を試みる。以下のフォーマットは現在FASTエンジンと互換性があります。
basic
commented_header
csv
no_header
rdb
tab
The fast engine can also be enabled through the format parameter by prefixing
a compatible format with "fast" and then an underscore. In this case, or
when enforcing the fast engine by either setting fast_reader='force'
or explicitly setting any of the 並列および高速変換オプション, read()
will not fall back on an ordinary reader if fast reading fails.
実例.¶
CSVファイルを開いて書き戻すには、以下の操作を実行してください。
>>> from astropy.table import Table
>>> t = ascii.read('file.csv', format='fast_csv')
>>> t.write('output.csv', format='ascii.fast_csv')
FASTエンジンを無効にするには、指定してください fast_reader=False
あるいは…。 fast_writer=False
それがそうです。例えば:
>>> t = ascii.read('file.csv', format='csv', fast_reader=False)
>>> t.write('file.csv', format='csv', fast_writer=False)
注釈
推測と迅速な読書
デフォルトの場合 read()
成功するまで、入力データのフォーマットを推測してみます。方法は、成功するまで異なるフォーマットを連続的に試してみます(参照 推測表形式 )である。各サポートされたフォーマットについては、まず高速バージョンを試し、その後、リーダの低速バージョンを試してみる。追加オプションがない場合、これは、高速に実現されていない純粋なPythonリーダーおよびいくつかのリーダーのPythonバージョンが、いくつかの高速リーダーに接触する前に試みられることを意味します。それらを完全に迂回するためには、上述したように迅速なリーダを明確に要求しなければなら
最適な性能を実現するために しかし、推測を完全に閉鎖することを提案する。 (guess=False
)またはフォーマットを指定することによって(例えば、 format='csv'
)および/またはセパレータなどの他のオプション。
本を読む¶
高速エンジンは普通のエンジンの一部ではないからです astropy.io.ascii
インフラストラクチャでは,高速リーダが高速リーダインフラストラクチャで実現されていないいくつかのパラメータを渡す際に誤りを引き起こす.このような場合には read()
迅速なリーダが明確に要求されない限り、通常のリーダに依存する(上記参照)。これらのパラメータは
負性.
header_start
(注釈タイトル形式を除く)負性.
data_start
data_start=None
comment
長さ%1ではない文字列
delimiter
長さ%1ではない文字列
quotechar
長さ%1ではない文字列
converters
Outputter
Inputter
data_Splitter
header_Splitter
並列および高速変換オプション¶
In addition to True
and False
, the parameter fast_reader
can also
be a dict
specifying any of three additional parameters, parallel
,
use_fast_converter
and exponent_style
.
例を引く¶
他のパラメータを指定するには、以下の操作を実行してください fast_reader
**
>>> ascii.read('data.txt', format='basic',
... fast_reader={'parallel': True, 'use_fast_converter': True})
これらのオプションは、有効になったときにフォームをより速く読み取ることができますが、デフォルトの場合、両方のオプションはいくつかの警告を持っているので無効になります。
♪the parallel
パラメータは通過するために使用することができる multiprocessing
モジュールは、1つの数字(使用するプロセス数)または True
この場合,プロセス数は multiprocessing.cpu_count()
それがそうです。これはIPython Notebookで問題を引き起こす可能性があるため、このコンテキストでのマルチ処理を奨励しないことに注意してください。
設ける use_fast_converter
このようになるでしょう True
以下に述べるように、より高速ではあるがやや不正確な浮動小数点値変換方法を有効にする。
♪the exponent_style
パラメータはデフォルト文字とは異なる文字を定義することを可能にする 'e'
入力ファイル中の指数フォーマットについて。特殊な環境 'fortran'
Fortran表現法における任意の有効指数文字の自動検出を有効にする.詳細についてはご参照ください Fortranスタイルの指数 それがそうです。
高速変換器¶
理想的には、入力浮動小数点値は、最も近い浮動小数点近似値に変換されるべきであり、すなわち、変換は、2つの最も近い表示可能な値間の距離の半分(すなわち、0.5)内で正しいべきである。 ULP それがそうです。通常のリーダとデフォルトの高速リーダは0.5 ULP内で浮動小数点値を変換できることを保証しているが,より速く,より不正確な変換方法もある. use_fast_converter
それがそうです。入力データが15ビットの有効数字未満である場合、または正確性が比較的重要でない場合、この変換器は、性能キーシーンにおける最適な選択である可能性がある。
Here 高速変換器の10進値とULPフォーマットのエラーを分析したIPythonノートです。有効デジタル数がかなり少ない値では、高速変換器は、最適な変換(0.5 ULP以内)を生成することを保証することができる。有効桁数が64ビット浮動小数点値の精度を超えると,高速変換器は0.5 ULP内に保証されなくなるが,約60%の値は最終的には0.5 ULP内,約90%は1.0 ULP内である.次法線および浮動小数点数の範囲外の値のような別の解析極値の高速変換動作のノートも利用可能である. here それがそうです。
大表を読み取る¶
非常に大きなテーブルを高速リーダーで読み取る情報については、ご参照ください 大表をブロックして読み取る それがそうです。
文章を書く¶
高速エンジンは、通常の筆記エンジンと同じ機能をサポートし、通常のエンジンよりも2~4倍速い。IPythonノートブック、FAST Writerと通常の筆記システムおよびデータ分析ライブラリとの相対性能をテスト Pandas 空き部屋はありますか。 here それがそうです。より速いエンジンの速度利点は整数データに対して最大であり,浮動小数点データに対して最小であり,浮動小数点,整数,テキストデータを混合したサンプルファイルでは,高速エンジンの速度は約3.6倍速い.なお、文字列を剥離する値は書き込み過程が遅くなるため、指定される strip_whitespace=False
性能を向上させることができる。
速度利得¶
高速ASCIIエンジンは汎用的な構文解析戦略に基づいて設計されている Pandas データ解析ライブラリであるため,その性能はパンダとほぼ同等である(デフォルトの場合はやや遅いにもかかわらず). read_csv
method. Here 通常のノートのパフォーマンスを比較したIPythonノートです astropy.io.ascii
リーダー、クイックリーダー、クイックコンバータを有効にしたクイックリーダー、NumPyの genfromtxt
パンダとの read_csv
基本スペース区切りファイルの異なるタイプの表データに使用されます。
要するに。 genfromtxt
平凡な人と astropy.io.ascii
リーダーは速度的によく似ています read_csv
整数と浮動小数点データよりやや速い高速エンジン;純浮動小数点データに対して、高速変換器を有効にすることで約50%の加速比を得ることができる。なお,Pandasは浮動小数点データを変換する際にAstropyにおける高速変換器とまったく同様の方法を用いる.
テキストデータについては,FASTエンジンとPandas間の性能差は,値が同じ場合,Pandasの速度はFASTエンジンのほぼ2倍であり,値がランダム化された場合,Pandasの速度はFASTエンジンのほぼ2倍であるため,データ値の重複の程度に依存する.これは,FASTエンジンがテキストデータに対して固定サイズのNumPy文字列配列を用い,Pandasが可変サイズの対象配列を用いて下位集合を用いて重複値のコピーを避けるためである.
全体的に、高速エンジンは通常のASCIIエンジンより4~5倍速いことが多い。入力データが非常に大きい場合(通常約100,000行以上)、特にデータが主に整数データまたは重複文字列値を含まない場合は、指定してください parallel
as True
can yield further performance gains. Although IPython does not work well with multiprocessing
, there is a script FASTエンジンの性能を並列テストし、サンプル結果を見ることができます here それがそうです。このプロファイルは、シリアルおよびパラレルAstropyリーダーに高速変換器を使用します。
もう1つ注目すべきは,入力としてファイル名を提供すると,FASTエンジンはメモリマッピングを用いることである.もしあなたが何らかの理由でこのような状況を避けたい場合は、開いたファイルオブジェクトを提供してください。しかしながら、これは、ファイル入力全体を一度に読み取らなければならないため、時間およびメモリの観点からは、一般に効率が悪い。