2017-09-28 17 views
0

私はしばしば、長い計算の結果として生じるnumpy配列を処理しました。計算のどこかでそれらを使う必要があります。私は現在、それらをピックルし、必要に応じてファイルを変数にアンピクルします。numpy配列をアスキーファイルに保存する最も良い方法

大きなデータサイズ(〜1Mデータポイント)に気付きましたが、これは遅いです。私は漬け物が巨大なファイルを保管するのに最善の方法ではないことを他のところで読んでいます。私はそれらをASCIIファイルとして保存し、効率的に読み込み、numpyの配列に直接ロードしたいと思っています。これを行う最善の方法は何ですか?

私は変数 'a'に100k x 3の2D配列を持っています。私はそれをASCIIファイルに格納し、それをnumpyの配列変数 'b'にロードしたいと思います。

答えて

3

Numpyの範囲はinput and output methodsです。これはあなたの後ろのものとまったく同じです。

1つのオプションは、numpy.save次のようになります。

import numpy as np 

my_array = np.array([1,2,3,4]) 
with open('data.txt', 'wb') as f: 
    np.save(f, my_array, allow_pickle=False) 

もう一度あなたのデータをロードするには:

with open('data.txt', 'rb') as f: 
    my_loaded_array = np.load(f) 
3

効率を上げたい場合、ASCIIは当てはまりません。 pickleの問題は、pythonのバージョンに依存していることです。したがって、長期間の保存には適していません。他のバイナリテクノロジの使用を試みることができます。numpy.saveメソッドをドキュメントhereとして使用するのが最も簡単な解決方法です。

2

あなたはポーズを問題は、データセットのサイズに直接関係します。

このような特殊なライブラリには、よくある問題がいくつかあります。

  1. Pythonのみの永続性:joblibは、便利な酸洗には大きすぎるファイルを格納するために特にalternative to pickleを提供します。
  2. HDF5は、具体的にはアレイの格納を目的としたファイル形式です。フォーマットは多言語およびマルチプラットフォームですが、非常に良いPythonライブラリが存在します:h5py

例はh5pyです。データを読み込むには

import h5py 
with h5py.File('data.h5', 'w') as f: 
    f.create_dataset('a', data=a) 

:データを書き込むには

import h5py 
with h5py.File('data.h5', 'r') as f: 
    b = f['a'][:] 
+0

私はHDF5は、自分のアプリケーションのための右のオプションであると思われると思います。私の質問はASCIIファイル(私は人間が読めることを意味する)に格納することだったので、答えとしてnp.saveオプションを受け入れました。あなたの入力をありがとう。 –

+0

十分な公正、言及のおかげで。私は他の人がasciiストレージを探しているにもかかわらず、便利だと思ってくれることを願っています:-) –

関連する問題