2016-08-15 101 views
1

我試圖對數據進行熱編碼。 數據是vocabulary_size的列表= 17005207.Python中的列表和Numpy數組

要熱編碼,我由num_labels = 100 的輸入列表以下代碼:

inputs = [] 
for i in range(vocabulary_size): 
    inputs.append(np.arange(num_labels) == data[i]).astype(np.float32) 

拋出我一個錯誤:

AttributeError: 'NoneType' object has no attribute 'astype' 

我嘗試了dtype = np.float32裏面的append函數,但又錯了。
當我試試這個:

inputs = [] 
for i in range(vocabulary_size): 
    inputs.append(np.arange(num_labels) == data[i]) 
inputs = np.array(inputs,dtype=np.float32) 

我得到正確的答案:vocabulary_size X num_labels的熱編碼輸入序列。

沒有使用Numpy的一條線的任何替代解決方案?

解決:我可以直接使用numpy數組(輸入)與列表(數據)?

信息有關數據:數據= np.ndarray(LEN(字),D型細胞= np.int32)

格式化功能:

def reformat(data): 
     num_labels = vocabulary_size 
     print (type(data)) 
     data = (np.arange(num_labels) == data[:,None]).astype(np.int32) 
     return data 
     print (data,len(data)) 
     return data 

新問題:數據的尺寸爲(vocabulary_size,)...如何使用ravel或reshape將數據轉換爲(1,vocabulary_size)的維度?

+0

你的錯誤出現從你試圖從'inputs.append()'調用得到**返回**的'astype'屬性的事實,那就是None對象。換句話說,你嘗試調用None.astype(),這顯然不起作用。 – jadsq

+0

冷靜下來。三次編輯如此之快,人們無法回答你的問題,因爲它每秒都在變化。你似乎明白,ravel或重塑可以幫助你:而不是趕着問這個問題,你有沒有試過閱讀'numpy.reshape'文檔? – YuppieNetworking

+0

Sry @YuppieNetworking,如果它太多了。只是想澄清一下。我確實閱讀過文檔。只是想要確切的實現,因爲在哪裏應該是參數重塑或ravel。 – SupposeXYZ

回答

0

不知道是否我理解正確你問什麼,但如果你想要的是一個oneliner,你可以改變你已經工作的代碼到這個:

inputs = np.array([np.arange(num_labels) == data[i] for i in range(vocabulary_size)], dtype=np.float32) 
+0

所以,你的意思是說..沒有其他選擇..但我們只需要將數據轉換爲numpy數組? – SupposeXYZ