簡體   English   中英

從字符串中提取整數

[英]Extract integers from strings

我想從數據集的每個實例的類名稱(標簽)列表中創建具有多個類的聚類問題的目標列表。

class_name = ['class_1','class_2','class_3','class_3','class_1','class_2',\
'class_2','class_1','class_1','class_2','class_1','class_3'] 

目標列表應類似於長度與class_name列表相同的數組,其中將整數分配給不同的類標簽。 哪種投注方式可以做到這一點?

target = np.array([1, 2, 3, 3, 1, 2, 2, 1, 1, 2, 1, 3])

類標簽(例如class_1)的格式為“ Xx_xx_xxx(A123)”或“ Xx_xx_xxx(A123)”。 括號中的文字不固定。 列表類型為'unicode'

您可以使用列表split將字符串split'_'字符,將數字從索引[1]轉換為int

>>> target = np.array([int(i.split('_')[1]) for i in class_name])
>>> target
array([1, 2, 3, 3, 1, 2, 2, 1, 1, 2, 1, 3])

您應該做的第一件事就是以標准格式獲取類。 根據上面的描述,如果類名位於字符串的括號內,則可以使用正則表達式來獲取類名。

import re
X = ['abc(class_1)', 'cde_(class_1)', 'def_(class_2)']
just_classes = [re.findall(r'\((.*)\)', thing)[0] for thing in X]
# ['class_1', 'class_1', 'class_2']

您可以在此處使用幾種不同的方法。 如果您正在使用numpy,scipy堆棧進行ml處理,建議您學習sklearn庫。 它具有許多有用的機器學習和AI工具,包括編碼類名。

使用sklearn

from sklearn.preprocessing import LabelEncoder
class_names = ['class_1','class_2','class_3','class_3','class_1','class_2',\
        'class_2','class_1','class_1','class_2','class_1','class_3'] 

my_enc = LabelEncoder()
my_enc.fit(class_names)
encoded1 =  my_enc.transform(class_names)

沒有外部圖書館

classes = set(class_names)
d = {c:i for i,c in enumerate(classes)}
encoded2 = [d[c_name] for c_name in class_names]
print encoded1 #approach 1 gives numpy array
print encoded2 # approach 2 gives standard python list

兩種方法都應該起作用。 自己實現的代碼並不多,但是總體而言,我建議您看一下sklearn 預處理工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM