これは愚かな質問かもしれませんが、私はそれに適切な答えを見つけることができません。私は、(2000, 2000, 2000)
の0の配列のバイナリ表現をディスク(バイナリ形式)に格納したい(理由は問いません)。バイナリファイルにゼロ(大量)を書き込んでください
with open('myfile', 'wb') as f:
f.write('\0' * 4 * 2000 * 2000 * 2000) # 4 bytes = float32
しかし、これはまったく必要ではない非常に大きな文字列を作成することを意味します。文字列などの高価なメモリとして(numpyの配列を作成し、それをディスクにフラッシュする時要素と店舗1バイトを超える
反復(非常に遅い)
:私は2つの他のオプションを知っています上記の例で作成)
私はwが、Cの速度ではなく、Pythonのループ速度でディスクchar
ntimes
にコピーするwrite(char, ntimes)
のようなものを(それはCと他の言語に存在するような)を見つけるためにホッピングされましたメモリ上にこのような大きな配列を作成する必要はありません。
100k程度の妥当なサイズの文字列を作成してループで複数回書き出すのはなぜですか? –
それはオプションですが、私は事前に配列の形を知っていません(2000^3が例です)。そして、妥当なサイズ*を計算し、Pythonの速度でループすることは依然として遅くなります。それは悪い解決策ではありません(そしてたぶん唯一のものです)が、私は、誰かがライブラリ/メソッド/私がループすることなくそれを行うことができない何かを思いつくことを望んでいた(例えば、Cython拡張) 。 –
配列が密集している(パックされている)場合、シェイプは重要ではありません。合計バイト数だけです。このように見てください:1つの巨大な文字列を1回書くという例とは区別できないはずです。 –