1. 程式人生 > >資料預處理:原始資料集快速分類的方法,numpy的使用技巧,資料的row=mask的column

資料預處理:原始資料集快速分類的方法,numpy的使用技巧,資料的row=mask的column

問題

假如資料集有3類,怎麼把一個龐大的陣列集3類,放在不同的數組裡。

分析

首先龐大資料集分類,肯定不能一個一個遍歷,而且強烈避免個人的操作,需要藉助於numpy處理。

示例

資料集,可以看出資料集為3類,我們要x也分成3類

x = [[1,2],[2,9],[3,9],[4,4],[5,9],[6,6],[7,7],[8,8],[9,9]]
y = [0, 0, 0, 1, 1, 1, 2, 2, 2]

先轉化為numpy

x = np.array([[1,2],[2,9],[3,9],[4,4],[5,9],[6,6],[7,7],[8,8],[9,9]])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])
x
array([[1, 2],
       [2, 9],
       [3, 9],
       [4, 4],
       [5, 9],
       [6, 6],
       [7, 7],
       [8, 8],
       [9, 9]])

y
array([0, 0, 0, 1, 1, 1, 2, 2, 2])

得到每個類別在y中的標記,也可以說是在x中的標記,value是指類別的名稱或者ID,3個類別得到3個標記陣列

labels = [y == value for value in range(3)]
print(labels)
[array([ True,  True,  True, False, False, False, False, False, False]), 
array([False, False, False,  True,  True,  True, False, False, False]), 
array([False, False, False, False, False, False,  True,  True,  True])]

根據標記陣列得到,對應x中的3組資料,記住這裡應該是x的row=mask的column,假如x是一維的,x的column=mask的column也可以自適應。

t = [x[ci] for ci in labels]
print(t)
[array([[1, 2],
       [2, 9],
       [3, 9]]), 
array([[4, 4],
       [5, 9],
       [6, 6]]), 
array([[7, 7],
       [8, 8],
       [9, 9]])]

#%%
# 假如x是一維的,x的column=mask的column也可以自適應。
t1 = [y.T[ci] for ci in labels] print(t1) t2 = [y[ci] for ci in labels] print(t2) [array([0, 0, 0]), array([1, 1, 1]), array([2, 2, 2])] [array([0, 0, 0]), array([1, 1, 1]), array([2, 2, 2])]

以上都是numpy內部的函式處理快。