numpyの浮動小数点配列の内容を、符号付き16ビット整数として生のバイナリファイルに保存したいとします。私はndarray.tofileを使ってこれを達成しようとしましたが、正しいフォーマット文字列を理解できません。ファイルは二重フォーマットで保存されているようですが、フォーマット文字列をどのように選ぶかによって異なります。これはどうすればいいですか?おかげさまで NumPyの配列データを持つ生のバイナリファイルを作成します。
8
A
答えて
19
私は
array.astype('int16').tofile(filename)
8
は、この例を試し、構造体のモジュールを見てみましょう、これを行う最も簡単な方法は、最初の配列はINT16に変換することだと思う:あなたがかもしれ
import struct
import numpy
f=open("myfile","wb")
mydata=numpy.random.random(10)
print(mydata)
myfmt='f'*len(mydata)
# You can use 'd' for double and <or> to force endinness
bin=struct.pack(myfmt,*mydata)
print(bin)
f.write(bin)
f.close()
+10
経験に基づいて、私は** struct ** packの使用を強くお勧めします**。そのAPIでは、大規模な配列サイズの場合**のパフォーマンスに大きな影響を与える変数に配列をデマングルする必要があります(つまり、 '*'演算子を使用する)。配列の各要素は、その要素を指し示すようにスタック上に作成される新しい64ビット・ポインタ(64ビット・マシン上)を必要とします。このオーバーヘッドを避けるために 'tostring' /' tobytes'/'tofile'に固執してください。たとえば、私たちの場合、100 Mbの配列を扱っていたため、6.4 GbのRAMがあるので、 'struct.pack'はその作業を行うことができます。 –
0
Matlab形式のファイルに名前と配列の辞書を保存できるscipy.io.savematを使用してください:
import scipy.io as sio
sio.savemat(filename, pydict)
ここpydictは= { 'NAME1':np.array1、 '名前2':np.array2、...}かもしれ
あなただけの必要な辞書をロードするには:
pydict = sio.loadmat(filename)
関連する問題
- 1. ラベルscipy.ndimage.labelを持つnumpyの配列
- 2. データ型(datetime、float)でnumpy再配列を作成するには?
- 3. TensorFlowは、numpy配列からデータセットを作成します。
- 4. 与えられたnumpy配列からブロック対角numpy配列を作成します。
- 5. 2つのテーブルのデータを結合して再帰配列を持つツリーを生成する
- 6. 特定のインデックスのみを持つnumpy配列の取得
- 7. 配列の値を持つ文字列を作成
- 8. バイナリファイルとスケーラビリティを持つgitの動作
- 9. numpyでこの配列のインデックスを作成するには
- 10. 配列からのデータを持つUITableView
- 11. PHPで配列の同じキーと値の和を持つ新しい配列を作成します
- 12. 等間隔の値を持つ配列を作成する
- 13. 2D配列を持つTreeSetのコンパレータを作成する - Java
- 14. 2D numpy配列のリストを3D numpy配列に変換しますか?
- 15. RESTfulはバイナリファイルを生成します
- 16. 2D numpy行列を2D numpy配列に変換します。
- 17. ストライドでnumpy配列を構成する
- 18. numpy既存の配列から新しい2次元配列を作成し、インデックスとしての列値
- 19. Matlabで 'Geostruct'データの配列を作成
- 20. QStringの配列から作成しようとするとnumpy配列が作成されない
- 21. 2つの配列から新しい配列を作成します。
- 22. idsの配列を持つハッシュの配列を配列します
- 23. Java、オブジェクトの配列を持つ操作
- 24. numpyマスクされた配列を持つPython散布図
- 25. numpyの配列
- 26. PHP(PCLZIP) - URLを持つ配列からzipファイルを作成しますか?
- 27. numpy配列から辞書を作成する
- 28. 3D numpy配列から3Dプロットを作成する
- 29. numpyレコード配列を作成するには?
- 30. 保持しているバイナリファイルを持つバイナリファイル
[numpyのドキュメント] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ndarray.tofile.html)は、「エンディアンと精度に関する情報が失われている」と述べています。これはすべてのプラットフォームで動作するのですか? – Gilly
'tofile'は、配列のメタデータではなく、配列の生のバイナリデータだけを書き込みます。典型的な使用例は、ファイルを開き、ファイルタイプに適したヘッダを書き、 'tofile'を使って生データを埋め込むことです。ヘッダーからメタデータ(エンディアン、精度、形状)を推測し、生データをそのプラットフォームに適した形式に変更するのは、ファイルを読み取るソフトウェアの責任です。メタデータがなければ、配列の生の内容を正しく解釈することはできません。 配列を読み書きするだけであれば、 "python hd5"かnumpy.saveを見てください。 –
ありがとうございます!この特別なastypeは、np.array([]、dtype = np.int8)を指定して配列を作成した場合でも必要でした。 –