本文示例代碼已上傳至個人
Github
倉庫https://github.com/CNFeffery/DataScienceStudyNotesgit
鏈式編程是一種很是高效的組織代碼的方式,典型如pandas
與scikit-learn
中的pipe()
,以及R
中的管道操做符%>%
等,它們均可以幫助咱們像鏈接管道同樣,將計算過程當中的不一樣步驟順滑的鏈接起來,從而取代繁瑣的函數嵌套以及避免多餘中間變量的建立。github
鏈式編程與常規寫法的比較以下例:編程
# 非鏈式寫法 func4(func3(func2(func1(A)))) # 鏈式寫法 A.func1().func2().func3().func4()
哪種寫法更簡潔明瞭,想必你們一眼就看得出來,而今天的文章就將帶你們認識如何藉助funct
的力量,來改造Python
原生列表,賦予其鏈式計算的能力。數組
funct
的設計理念就是相似Python列表但更棒,它借鑑了numpy
的不少特色,配合功能豐富的各類鏈式計算方法,使得咱們在使用它完成計算任務編寫代碼如絲般順滑時~數據結構
利用pip install funct
完成安裝(本文演示版本爲0.9.2)以後,下面咱們來認識它的一些優秀特性吧~併發
funct
中類比列表和numpy
中的數組,創造了Array
這種特別的數據結構,經常使用的有以下幾種建立方式:函數
最常規的方式是從現有的其餘數據結構,轉換到Array
,常見以下面的幾個例子:spa
除了從現成的數據中建立Array
以外,咱們還能夠相似numpy
中的linspace()
等API那樣,基於規則批量建立數據,經常使用的有以下兩種方法:設計
既然是創建在列表的基礎上,那麼funct
對嵌套Array
尤爲是不規則嵌套Array
的支持也是很到位的:3d
但在配合多個numpy
數組構建嵌套Array
時要注意,最後必定要加上toArray()
方法才能完全完成轉換:
大體介紹完如何建立funct.Array
以後,很重要的一點就是如何對已有Array
進行索引,在funct
中針對Array
設計了以下幾種豐富的索引方式:
既然繼承自列表,天然可使用Python
原生列表的索引與切片方式:
咱們都知道Python
原生列表不能傳入一系列標號對應的數組來一次性索引出多個值,除非轉換爲numpy
數組或pandas
的Series
,但這又會在一些應用場景下丟失靈活性,但在Array
中,它能夠!
Array
一樣支持傳入Bool
值索引,使得咱們能夠將某個條件判斷以後的判斷結果做爲索引依據傳入:
既然Array
是支持嵌套結構的,天然能夠進行多層索引,但須要注意的是:
講完了如何建立與索引funct.Array
以後,就來到了本文的重頭戲——Array
的鏈式運算上,在funct.Array
中,幾乎全部常見的數值與邏輯運算都被封裝到方法中,咱們來一階一階的來看看不一樣狀況下如何組織代碼:
首先咱們來看看最基礎的四則運算等操做在Array
中如何鏈式下去:
這樣每一步都很清楚,且每一步均可以獨立添加註釋,保持了代碼的可讀性,譬如可用於歸一化與標準化的計算上:
除了使用內置的基礎的運算方法以外,在funct.Array
中還支持配合map()
方法將任意函數應用到每一個元素上,從而無限拓寬計算的自由性,譬如咱們在前面歸一化的基礎上對數據進行分箱:
當咱們想要在鏈式運算中引入其餘數組對象時,就能夠用到更高級的zip()
方法,譬如咱們想找出多個Array
中相同位置最大值:
在pandas
中咱們能夠利用groupby()
進行數據分箱並銜接任意形式的運算,在funct.Array
中咱們也能夠配合groupBy()
方法實現:
而除了本文介紹到的這一點API以外,funct
還提供了上百種實用API,而且還具備並行執行與併發執行等高級特性,感興趣的朋友能夠前往官方文檔查看( https://github.com/Lauriat/funct )。
以上就是本文的所有內容,歡迎在評論區與我進行討論~