2017-02-27 19 views
5

現在我有一個具有形狀(100,10)的numpy數組數據集。每行是一個熱門編碼。我想轉換成形狀爲(100,)的n-drrary,這樣我就可以將每個向量行轉換爲一個表示非零索引索引的整數。有沒有使用numpy或tensorflow做這個快速的方法?如何將一個熱編碼轉換爲整數

謝謝!

+0

所以你試圖解碼每一行矢量?你在尋找類似'np.argmax()'的東西嗎?如果你描述瞭解碼的目的,這將是有幫助的。 – rosendin

回答

4

正如Frank Demoncourt所指出的那樣,由於one_hot只有一個1而其餘的都是零,所以可以使用argmax作爲這個特定的例子。一般來說,如果你想在一個numpy數組中找到一個值,你很可能會想諮詢numpy.where。此外,該堆棧交換問題:

Is there a Numpy function to return the first index of something in an array?

由於一熱載體與全0和一個1向量,你可以做這樣的事情:

>>> import numpy as np 
>>> a = np.array([[0,1,0,0],[1,0,0,0],[0,0,0,1]]) 
>>> [ np.where(r==1)[0][0] for r in a ] 
[1, 0, 3] 

這只是建立索引列表,每行爲1。 [0] [0]索引只是爲了讓結構(包含數組的元組)返回的位置超出了您的要求。

對於任何特定的行,你只是想索引到一個。例如,零排在1索引1

>>> np.where(a[0]==1)[0][0] 
1 
6

發現可以使用numpy.argmaxtf.argmax。例如:

import numpy as np 
a = np.array([[0,1,0,0],[1,0,0,0],[0,0,0,1]]) 
print('np.argmax(a, axis=1): {0}'.format(np.argmax(a, axis=1))) 

輸出:

np.argmax(a, axis=1): [1 0 3] 

您可能也想看看sklearn.preprocessing.LabelBinarizer.inverse_transform

+0

Argmax適用於這個例子,因爲在一個熱點中,只有一個1,其餘的都是零。對於在np n-darray中查找特定值的一般情況,OP可以使用np.where。乾杯! – JawguyChooser