問題タブ [h5py]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - h5pyでHDF5ファイルを読み取るときにPythonスライスオブジェクトを使用しますか?
モジュールを使用して HDF5 ファイルからデータにアクセスするために Python スライス オブジェクトを使用しようとしていh5py
ます。この例をまとめて、numpy
配列では機能するが、 では機能しないことを示しh5py
ます。
これにより、次の出力が得られます。
これが不可能かどうかは誰にもわかりませんh5py
か?そうでない場合、私の例h5py
のようにスライスを明示的に入力する代わりに、オブジェクトまたは変数を使用してスライスする別の方法はありf['data'][0:3,2:5]
ますか?
python-3.x - h5py、散発的な書き込みエラー
大きな (500K x 500K) マトリックスに格納するいくつかの浮動小数点数があります。(いくつかの特定の条件に従って) 可変サイズの配列を使用して、それらをチャンクに格納しています。
配列を生成して共有キューに入れる並列化されたコード (Python3.3 および h5py) と、キューからポップして HDF5 マトリックスに 1 つずつ書き込む 1 つの専用プロセスがあります。約 90% の確率で期待どおりに動作します。
ときどき、特定の配列で書き込みエラーが発生しました。複数回実行すると、障害のあるアレイが常に変化します。
コードは次のとおりです。
エラーは次のとおりです。
書き込みタスクの間に 2 秒の一時停止 (time.sleep(2)) を挿入すると、問題は解決したように見えます (ただし、250.000 回以上書き込む必要があるため、書き込みごとに 2 秒を無駄にすることはできません)。書き込み例外をキャプチャして障害のある配列をキューに入れると、スクリプトは停止しません (おそらく)。
CentOS (2.6.32-279.11.1.el6.x86_64) を使用しています。洞察はありますか?
どうもありがとう。
numpy - Python パーティクル シミュレーター: コア外処理
問題の説明
Python/numpy でモンテカルロ粒子シミュレーター (ブラウン運動と光子放出) を作成中。シミュレーション出力 (>>10GB) をファイルに保存し、2 番目のステップでデータを処理する必要があります。Windows と Linux の両方との互換性は重要です。
粒子の数 ( n_particles
) は 10 ~ 100 です。時間ステップ数 ( time_size
) は ~10^9 です。
シミュレーションには 3 つのステップがあります (以下のコードはオールイン RAM バージョン用です)。
rate 配列をシミュレート (および保存) し
emission
ます (ほぼ 0 の要素を多数含む):- 形状 (
n_particles
xtime_size
)、float32、サイズ80GB
- 形状 (
配列を計算
counts
します (以前に計算されたレートを持つポアソン過程からのランダム値):形状 (
/li>n_particles
xtime_size
)、uint8、サイズ20GB
カウントのタイムスタンプ (またはインデックス) を見つけます。カウントはほとんどの場合 0 であるため、タイムスタンプ配列は RAM に収まります。
/li>
ステップ 1 を 1 回実行してから、ステップ 2 ~ 3 を何度も (~100 回) 繰り返します。将来的には、計算する前に前処理emission
(適用cumsum
または他の関数)が必要になるかもしれませんcounts
。
質問
私は動作中のメモリ内実装を持っており、(はるかに) 長いシミュレーションに拡張できるコア外バージョンを実装するための最良のアプローチは何かを理解しようとしています。
存在してほしいもの
配列をファイルに保存する必要があり、シミュレーションに 1 つのファイルを使用したいと考えています。また、シミュレーション パラメーター (スカラー) のディクショナリを格納および呼び出す "簡単な" 方法も必要です。
理想的には、チャンクを事前に割り当てて埋めることができる、ファイルでバックアップされた numpy 配列が必要です。次に、numpy 配列メソッド ( max
、cumsum
、...) を透過的に動作させchunksize
、各反復でロードする配列の量を指定するキーワードのみを必要とします。
さらに良いことに、キャッシュと RAM の間ではなく、RAM とハード ドライブの間で動作するNumexprが必要です。
実用的なオプションは何ですか
最初のオプションとして、pyTables の実験を開始しましたが、その複雑さと抽象化に満足していません (numpy とは大きく異なります)。さらに、私の現在のソリューション(以下を参照)は醜く、あまり効率的ではありません。
だから私が答えを求める私の選択肢は
必要な機能を備えた numpy 配列を実装する (どのように?)
よりスマートな方法でpytableを使用する(異なるデータ構造/メソッド)
h5py、blaze、pandas などの別のライブラリを使用します (これまで試したことはありません)。
暫定的な解決策 (pyTables)
シミュレーション パラメーターを'/parameters'
グループに保存します。各パラメーターは numpy 配列スカラーに変換されます。詳細なソリューションですが、機能します。
データをチャンクで生成し、新しいチャンクごとに追加する必要があるため (ただし、最終的なサイズはわかっています)、emission
拡張可能な配列 ( ) として保存します。EArray
貯蓄counts
はもっと問題です。pytable 配列のように保存すると、「counts >= 2」のようなクエリを実行するのが難しくなります。したがって、カウントを複数のテーブル (パーティクルごとに 1 つ) [UGLY] として保存し、.get_where_list('counts >= 2')
. これがスペース効率に優れているかどうかはわかりません。単一の配列を使用する代わりにこれらすべてのテーブルを生成すると、HDF5 ファイルが大幅に破壊されます。さらに、奇妙なことに、これらのテーブルを作成するには、カスタム dtype を作成する必要があります (標準の numpy dtype の場合でも):
各粒子カウント「テーブル」には異なる名前 ( name = "particle_%d" % ip
) があり、簡単に反復できるようにそれらを Python リストに入れる必要があります。
編集: この質問の結果は、PyBroMoと呼ばれるブラウン運動シミュレーターです。
python - h5pyを使用してpythonでmatlab配列を読み取る方法
2GBを超えるmatlab配列があります...h5pyを使用して読み取りたいです。データは単純な 3D double 配列です。しかし、私は単にインターネット上で手がかりを見つけることができませんでした.
誰かが私を助けることができますか?それがどのように行われたか、例が必要です。h5py のドキュメントは役に立ちませんでした。
python - h5py を使用した 2D/4D マスク配列の効率的な読み込み
HDF5 ファイルの大きな 4 次元配列に格納されたデータがあります。各ファイルの次元は (Time,x,y,z) です。時間列のサブセットをx、y、z 値の一部と共にロードして、2D (T,location) 行列を取得したいと考えています。ロードしたいすべての x、y、z 位置の 3D 論理マスクがあります。私の質問は、保存されたデータを 2D に再フォーマットしたほうがよいのでしょうか?
hdf5マスキング構文では、論理配列を単一次元のマスクとして使用できますが、複数次元は使用できないため、答えは簡単に「はい」だと思いました。コード例:
MyTestScript.py
h5py に関する私の現在の理解に基づいて、リストされている 2 番目のオプション (「データ」が 2D 配列の場合) は、配列全体をロードすることはないため、はるかに高速にロードする必要があるように見えます。また、上記と同様のコードの最初のパス テストでは、大幅に高速化されます (約 10 倍高速 - 実際のスクリプトでタイミング チェックを行いました)。
ただし、コードの最初の実行後、時間差はほぼ完全になくなります。hdf5ファイル(またはコードのインタープリター?)が完全にロードされたデータを何らかの方法でキャッシュしたかのように、両方のバージョンがはるかに高速にロードされます。毎回別々のpythonセッション(python MyTestScript.py)で行っているため、それがどのように行われているのかわかりません。
どうしたの?高速化のソースは?いつそれが起こると期待できますか?
洞察に感謝します。