顯示具有 Numpy 標籤的文章。 顯示所有文章
顯示具有 Numpy 標籤的文章。 顯示所有文章

2017年2月10日 星期五

演算法(2)--使用Numpy.bincount來實作簡單的桶子排序法



        會注意到Numpy.bincount()這個函數,其實是在閱讀機器學習的程式碼裡常常出現。常用來
處理類別標籤的向量。它是內建在Python Numpy裡。原文的解釋其實有點難懂,故我把我的心得
記下來,發現它原始設計的概念就是類似桶子排序法的基本概念,是一個很有趣的函數,所以也
特別用它實作一簡單的桶子排序。

理解Numpy.bincount()
numpy.bincount(x, weights=None, minlength=None)

 1.假設輸入X=[0,1,2,2,3,4,4],那麼產生bins(桶子)的數量為該X最大值4
 再加1=5,於是我們產生了5個bins(桶子)的排序編號為indx0~indx4,
 可以視為一向量[indx0,indx1,indx2,indx3,indx4]

 2.接著來看如何放原本的資料到這5的桶子(bins,分別indx0~indx4)
 原本的輸入X=[0,1,2,2,3,4,4]裡有"一個"資料0,表示要放到indx0桶子的只有一個,
 故indx0=1。
 接著,原本的輸入X=[0,1,2,2,3,4,4]裡有"一個"資料1,表示要放到indx1桶子的只有
 一個,故indx1=1。
 接著,原本的輸入X=[0,1,2,2,3,4,4]裡有"兩個"資料2,表示要放到indx2桶子的有
 兩個,故indx1=2。
    依序放完所以桶子,indx3及 indx4桶子,可以得到indx3=1,indx4=2
    故得到輸出結果為[1,1,2,1,2]即:[indx0=1,indx1=1,indx2=2,indx3=1,indx4=2]
 使用Python語言程式如下:
   EX1:
 import numpy as np
 X=[0,1,2,2,3,4,4]
 print(np.bincount(X))
   結果是:[1,1,2,1,2]

  EX2:
   import numpy as np
 X=[0,5,3,2,3,1,4,2,4]
 print(np.bincount(X))
 結果是:[1,1,2,2,2,1]

  注意:輸入的X數值不可以為負,否則報錯
 若有實數值,實際測試會被無條件捨去後當整數使用