問題タブ [numpy-memmap]
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 - Python with-context manager 内で np.memmap() バイナリ ファイルを開きます
大きなスクリプトの 1 つからファイルを開くことができないという非常に奇妙な問題があります。
この問題は断続的に発生し、エラーを理解できないようです。このエラーが発生しています:
私のスクリプトのこのコマンドから:
私が使用するとき:
として評価されTrue
ます。また、open
コマンドを単独で実行すると、次ipython
のファイルが正常に開きます。
私は言葉を失っており、errno 22
エラーは誤解を招くと思います。前述したように、この問題は断続的に発生し、一部のファイルで機能します。誰かが私が間違っていることを知っていますか?
私は Windows 8 マシン 64 ビットで作業しており、Anaconda 2.1.0 (64 ビット) ディストリビューションから Python バージョン 2.7.8 を実行しています。
python - das 配列で float32 を使用するとメモリ エラーが発生する
を使用して 1.25 GB のデータセットを Python にインポートしようとしていますdask.array
ファイルは 1312*2500*196uint16
の配列です。float32
後で処理するために、これを配列に変換する必要があります。
この Dask 配列を でつなぎ合わせることができましたがuint16
、 に変換しようとするとfloat32
、メモリ エラーが発生します。
チャンクサイズに何をしても問題ありません。常にメモリエラーが発生します。
配列を 100 行で連結して配列を作成します (2500 次元を 100 行の小さな断片に分割します。これは、ファイルを読み取ってから配列を作成するために使用する必要がある画像ファイルをdask
ネイティブに読み取ることができないためです。以下では、 「できるだけ短い」コード スニペットを提供します。.RAW
numpy.memmap()
私は2つの方法を試しました:
1)完全なuint16
配列を作成してから、次のように変換してみてくださいfloat32
:
(注:memmap
は 1312x100x196 の配列で、行の範囲は 0 から 24 です)
そして、私は使用します
方法 2:
どちらの方法でもメモリ エラーが発生します。
これには何か理由がありますか?
dask
配列は最大 100 GB のデータセット計算を実行できると読みました。
すべてのチャンク サイズを試しました (10x10x10 から 1 行まで)
python - Oja ルールで memmap を使用して RAM をクラッシュさせる
サイズ 400x156300 のデータセットで oja のルールを使用しています。RAMがクラッシュするようです。何が原因なのかわかりません。助けてください。私は12GBのRAMを持っています。memmap を使用しようとしましたが、それでもクラッシュします!!
また、提起された問題: https://github.com/itdxer/neupy/issues/27。パッケージ開発が活発かどうかわかりません。
RAM のクラッシュとは、RAM の使用率が 100% を超え、コンピューターが応答しなくなることを意味します。
python - ブール配列のパッキングは int を通過する必要があります (numpy 1.8.2)
ブール値を格納するよりコンパクトな方法を探しています。numpy は、1 つのブール値を格納するために内部的に 8 ビットを必要としますが、np.packbits
それらをパックできるようにします。これはかなりクールです。
問題は、ブール値の32e6 バイト配列を 4e6 バイト配列にパックするには、最初に256e6 バイトを費やしてブール配列を int 配列に変換する必要があることです。
それについて numpy トラッカーで開かれた 1 年前の問題があります ( 参照 https://github.com/numpy/numpy/issues/5377 ) 。
誰かが解決策/より良い回避策を持っていますか?
正しい方法で実行しようとしたときのトレースバック:
PS: bitarray を試してみますが、純粋な numpy で取得する必要があります。
python-2.7 - numpy memmap'd ファイルを単一の memmap に連結する
非常に多数 (>1000) のファイルがあり、それぞれ約 20 MB です。これらのファイルは、単純なバイナリ形式で保存された連続時系列データを表し、それらをすべて直接連結すると完全な時系列が復元されます。
memmap を使用して各ファイルをアドレス指定し、それらすべてをその場で 1 つの大きな memmap に連結することにより、これを仮想的に Python で実行したいと考えています。
SO を検索すると、np.concatenate がそれらをメモリにロードすることが示唆されますが、これはできません。ここでの質問は部分的に答えているようですが、そこの答えは、連結前にファイルの大きさを知っていることを前提としていますが、これは必ずしも真実ではありません。
では、メモリマップの大きさを事前に知らずにメモリマップを連結する一般的な方法はありますか?
編集:リンクされた質問が実際にディスク上に連結ファイルを作成することが指摘されました。これは私が望むものではありません。
python - numpy の平均値が memmap の最大値より大きい
タイムスタンプの配列があり、行列 X の 2 列目の行ごとに増加します。タイムスタンプの平均値を計算すると、最大値よりも大きくなります。ストレージに numpy memmap を使用しています。なぜこうなった?
編集: ここに memmap ファイルをアップロードしました。http://www.filedropper.com/x_2これが私がロードする方法です。
python - numpy.memmap'd ファイルを並行して更新する場合、ファイル全体ではなくスライスのみを「フラッシュ」する方法はありますか?
私は多くの厄介な i/o を実行する必要があり、numpy でメモリマップされたファイルを使用することを選択しました...多くの頭痛の種の後、プロセスがディスクに「フラッシュ」すると、他のプロセスが試みているものを上書きすることが多いことに気付きました古いデータで書き込む... mmap パッケージを使用すると、チャンクだけをディスクに書き込むことができることを知っています。私は mmap を使用しますが、私のデータはゼロと非常に小さな数字の混合で構成されているため、文字列として作成されるバイト数と、どのプロセッサがどのチャンクを「所有」しているかを把握するのは困難です。
次のようなことをする方法はありますか?
古いゼロを新しいデータにフラッシュバックすることなく、各プロセッサが同時に mmap を更新できるようにするには?