如何在磁盘上保留编码的numpy数组?

时间:2017-12-14 22:36:23

标签: python 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是相应数字向量的字符串表示。我的目标是以人类可读的格式存储这种数组,我并不真正关心读取数值,而是保留它们与相应唯一标签的一对一关系。

这样的事情可能吗?感谢。

1 个答案:

答案 0 :(得分:4)

您似乎正在尝试根据各自之间的唯一性为每行分配标签。因此,您可以使用np.unique及其axis参数将每行打包为一个return_inverse,以便根据每个项的唯一性对每个项进行ID,像这样 -

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']