2017-12-14 4 views
0

次のように私は数字のnumpyの配列を持っている:エンコードされたnumpy配列をディスクに保存する方法は?

array([[ 0.00365172, -0.01862929, 0.00739219, ..., -0.05520727, 
     -0.00388453, -0.00591132], 
     [ 0.00084692, -0.0177305 , 0.00618157, ..., -0.05275924, 
     -0.00323982, -0.00107789], 
     [ 0.01276451, -0.00361472, 0.0008607 , ..., 0.00464235, 
     0.00075972, 0.00700309]], dtype=float32) 

は、次のように各配列の項目がいくつかのテキストラベルでエンコードされるようにディスク上でこれを格納するための最も効率的な方法は何ですか:

array(['LabelA' 
     'LabelB', 
     'LabelC']) 

つまり、LabelA、LabelBおよびLabelCは、対応する数値ベクトルの文字列表現です。私の目標は、この種の配列を人間が判読可能な形式で保存することです。数値の読み込みには関心がありませんが、対応する一意のラベルとの一対一の関係は維持されます。

これは可能でしょうか?ありがとう。

+0

投稿されたソリューションはうまく機能しましたか? – Divakar

+0

はい@Divakar、私はまだラベルから元の配列を再構築する必要があるので、特にいくつかのテストを実行する必要がありますが、このアプローチはうまくいくようです。再度、感謝します。 –

答えて

4

それぞれの行にラベルを割り当てようとしているようですが、それらの間の一意性に基づいています。だから、あなたがそうのように、1 項目とその独自性に基づいてID-INGのような各項目についてreturn_inverseとして各行をパックするために、そのaxis引数でnp.uniqueを使用することができます -

In [42]: a = np.array([[3,5,8,2],[4,1,5,2],[3,5,8,2]]) 

In [43]: unique_ids = np.unique(a,axis=0, return_inverse=1)[1] 

In [44]: unique_ids 
Out[44]: array([0, 1, 0]) 

In [45]: ['Label'+str(i) for i in unique_ids] 
Out[45]: ['Label0', 'Label1', 'Label0'] 

を点で最大26ユニークなラベルのために、私たち確実に使えるcapital letters -

In [50]: import string 

In [51]: ['Label'+string.uppercase[i] for i in unique_ids] 
Out[51]: ['LabelA', 'LabelB', 'LabelA'] 
+1

私は完全に質問を誤解しました。非常にエレガントなソリューション! – Cleb

関連する問題