Julia語言程序設計( 簡體 字) | |
作者:魏坤 | 類別:1. -> 程式設計 -> 綜合 |
出版社:機械工業出版社 | 3dWoo書號: 50010 詢問書籍請說出此書號! 有庫存 NT售價: 495 元 |
出版日:10/1/2018 | |
頁數:420 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787111607571 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章 初識Julia1
1.1 有用的資源2 1.2 環境準備4 1.2.1 二進制包安裝5 1.2.2 編譯安裝7 1.3 交互式控制臺8 1.4 命名規則與關鍵字11 1.5 先睹為快12 1.5.1 Hello World12 1.5.2 體型分布案例13 1.5.3 小結18 第2章 基礎概念19 2.1 靜態與動態語言19 2.2 內存管理20 2.3 經典編程范式21 第3章 數值系統24 3.1 整型24 3.1.1 表達方式25 3.1.2 類型強制限定27 3.1.3 有無符號轉換28 3.2 布爾型29 3.3 浮點型30 3.3.1 基本定義31 3.3.2 零的表達32 3.3.3 epsilon34 3.3.4 無窮值35 3.3.5 非數值37 3.3.6 內置常量37 3.4 有理數型38 3.5 復數型40 3.6 隨機數42 3.7 任意精度算術43 第4章 運算符46 4.1 算術運算符46 4.2 位運算符51 4.3 更新運算符55 4.4 比較運算符56 4.5 邏輯運算符60 4.6 運算優先級61 4.7 類型提升62 第5章 控制邏輯64 5.1 復合表達式64 5.2 判斷邏輯65 5.3 循環邏輯67 5.3.1 while67 5.3.2 for69 5.4 異常處理73 5.4.1 異常觸發73 5.4.2 異常捕捉74 第6章 類型系統77 6.1 類型簡介77 6.2 抽象類型78 6.3 元類型80 6.4 類型操作83 6.4.1 弱類型機制83 6.4.2 類型斷言84 6.4.3 DataType 85 6.4.4 類型別稱86 6.4.5 繼承關系87 6.5 復合類型88 6.5.1 基本定義88 6.5.2 默認構造函數90 6.5.3 成員訪問及不可變性91 6.5.4 單例復合類型93 6.6 類型聯合94 6.7 TypeVar96 6.8 類型參數化97 6.8.1 參數化復合類型97 6.8.2 參數化抽象類型102 6.8.3 參數化元類型105 6.8.4 參數化基本原理106 6.8.5 參數化繼承關系108 6.8.6 協變與逆變110 6.9 常用數集112 6.9.1 元組113 6.9.2 鍵值對115 6.9.3 字典117 6.9.4 集合121 6.10 缺失值的表達123 6.10.1 missing123 6.10.2 nothing125 6.10.3 可有可無的表達125 第7章 函數129 7.1 基本定義129 7.1.1 常規結構129 7.1.2 類型限定130 7.1.3 共享傳參132 7.1.4 數集展開式調用133 7.1.5 多返回值134 7.2 參數傳遞方式134 7.2.1 默認參數134 7.2.2 鍵值參數135 7.2.3 可變參數137 7.3 函數對象140 7.3.1 Function類型140 7.3.2 函數作為參數141 7.3.3 函數作為返回值143 7.4 匿名函數144 7.5 參數化方法146 7.6 多態分發148 7.7 復合類型構造方法153 7.7.1 外部構造方法153 7.7.2 內部構造方法155 第8章 多維數組158 8.1 創建數組158 8.1.1 串聯方式160 8.1.2 輔助構造函數163 8.1.3 范圍表達式164 8.1.4 推導式168 8.2 索引訪問169 8.3 遍歷迭代176 8.4 子數組與視圖179 8.4.1 范圍切片179 8.4.2 邏輯索引180 8.4.3 局部視圖180 8.5 稀疏數組182 8.5.1 典型稀疏結構183 8.5.2 結構轉換184 8.5.3 內容映射186 8.6 矢量化計算189 8.6.1 map函數189 8.6.2 廣播192 8.6.3 點操作193 8.6.4 數組運算符196 8.7 排序197 8.8 查找200 8.9 missing作為元素205 8.10 線性代數中的矩陣處理207 8.10.1 矩陣操作207 8.10.2 特殊矩陣208 8.10.3 矩陣分解211 第9章 字符串217 9.1 字符217 9.2 String對象220 9.2.1 表達220 9.2.2 索引221 9.2.3 遍歷223 9.2.4 子串224 9.3 變量替換225 9.4 正則表達式226 9.5 常用操作229 9.5.1 連接229 9.5.2 比較232 9.5.3 搜索232 9.5.4 替換234 9.5.5 分割235 9.6 字節數組237 9.7 與數值的轉換239 第10章 元編程241 10.1 Symbol類型241 10.2 Expr類型243 10.2.1 構造243 10.2.2 衍生248 10.3 宏249 10.3.1 定義250 10.3.2 調用250 10.3.3 預定義宏251 第11章 時間與日期255 11.1 類型255 11.2 構造257 11.3 訪問260 11.4 解析262 11.5 運算265 11.5.1 早晚比較265 11.5.2 時長計算267 11.5.3 時間序列269 11.5.4 周期舍入270 11.6 屬性273 第12章 流與IO275 12.1 標準流275 12.2 文件操作278 12.3 讀寫緩存281 12.4 流的回溯284 12.5 序列化287 12.6 網絡通信290 第13章 組織結構294 13.1 模塊294 13.1.1 基本定義294 13.1.2 標準模塊296 13.1.3 模塊路徑298 13.1.4 預編譯298 13.2 模塊與腳本文件299 13.3 變量域300 13.3.1 全局域302 13.3.2 局部域302 13.3.3 let關鍵字305 13.4 包309 13.4.1 管理機制309 13.4.2 安裝移除312 13.4.3 更新固化317 13.4.4 小結318 第14章 并行計算319 14.1 基礎概念319 14.1.1 進程與線程319 14.1.2 條件變量320 14.2 協程調度321 14.3 數據通道325 14.3.1 Channel對象325 14.3.2 通道綁定330 14.4 遠程調用與遠程引用332 14.5 共享數組345 14.6 方法小結348 第15章 混合編程351 15.1 運行外部程序351 15.2 調用C/C++352 15.2.1 鏈接庫操作352 15.2.2 函數調用353 15.2.3 數據訪問356 15.2.4 C++接口358 15.3 嵌入C/C++358 15.4 與Python互調362 第16章 Julia編程規范364 16.1 文檔注釋364 16.2 高性能編程建議368 16.2.1 類型369 16.2.2 函數373 16.2.3 數組377 16.2.4 IO381 16.2.5 其他381 16.3 與其他語言的異同382 16.3.1 與Python相比382 16.3.2 與Matlab相比384 16.3.3 與R相比385 16.4 Julia代碼風格387 第17章 編程實戰389 17.1 決策樹基本概念389 17.2 決策樹分類器的實現391 17.3 隨機森林算法的構建406 附錄A 內置異常類型409 附錄B 內置系統常量411 附錄C 字符串操作函數413 附錄D 常用包簡介416 后記428 本書系統介紹Julia編程語言的基本概念、各種功能、編程要點,包含大量示例代碼以及編程技巧。全書共17章。第1~2章介紹Julia語言的基本特點、基礎概念。第3~4章介紹Julia語言的數值系統、各種運算符使用規則。第5~6章介紹類型系統,以及經典的判斷、循環邏輯。第7~8章介紹函數與方法,以及Julia的核心優勢——多維數組。第9~11章介紹字符串與日期處理方法以及元編程。第12章介紹與IO相關的內容,包括流、文件操作、網絡通信及序列化等。第13章介紹Julia代碼的組織方式,包括模塊、文件以及包。第14章介紹Julia原生提供的并行計算特性,是Julia中頗具魅力的內容之一。第15章介紹Julia與C/C++、Python進行混合編程的基本方法。第16章總結了Julia編程方面的經驗以及優化建議。第17章給出了編程案例。本書內容豐富,講解細膩,適合于所有軟件開發人員,以及高等院校相關專業師生。
幾十年前,科學家為了避免處理重復、單調的事情,比如反復地按一套公式計算結果等,發明了計算機。計算機其實是工業自動化的一個產物,可以說是工業化時代的巔峰代表。當時人們怎么也不會想到,計算機的發展帶來了互聯網,而互聯網導致了信息化時代的到來。如今,在數據蔓延、不斷滲透的過程中,智能化代表了未來的發展方向。
與此同時,數據的不斷累積、膨脹、延伸引發了計算領域的深刻變化,而且數據的密集性和分布性也提出了大量的計算密集性和分布式要求。很多工業級的生產場景中,在要求開發高效率、維護低成本、運行高可靠的同時,還需要具備高性能的特點。Julia語言應運而生了。 為何撰寫本書 Julia借助于JIT動態解析器及其優秀的設計機制,在一些計算特性上能達到靜態語言的性能,這是非常令人驚訝的,也是吸引筆者的地方。筆者在大數據挖掘與機器學習領域浸淫十幾年,面對種類繁多、數量巨大、計算邏輯復雜的各種問題,深感性能與開發效率極為重要。本想淺嘗,但卻再無法舍棄,Julia語言的各種特性令筆者興奮不已。 幾年前我開始接觸Julia,其自然快捷的編寫感受,順暢舒適的體驗,與現在廣為使用的Python頗為相近。但Julia更多的是以科學與數值計算為目的,原生的并發機制與分布式、云計算特性,簡潔人性化的語法,以及媲美于靜態語言的性能,所有這些表現都是筆者期待已久的。而今,在日常的數據分析和前期數據處理中,筆者都會首選Julia語言。 為了讓喜愛的Julia語言能夠更快普及,進入首選的工業級技術架構,筆者不揣淺陋,捉筆從文,寫就此書,以求與各位愛好者共同進步。也期冀Julia能成為一個寫著簡單、讀著愉悅、遷移方便、應用廣泛、性能強勁的通用編程語言,讓我們在開發工作中不再糾結語言的選擇。 Julia的官方文檔還算詳細,但組織結構并不清晰,概念散亂各處,對初學者并不友好。為此,筆者愿意以此書為契機,將這幾年的經驗分享給大家,希望能更條理清晰地展現Julia的特色,幫助大家更快、更好地熟悉并掌握Julia,并在實際開發中獲益。 本書的結構 Julia語言不僅提供了靈活、多樣、簡潔的語法,更有很多符合實際開發需求的強大特性,也充滿了人性化的設計。它不僅支持各種類型的聲明定義、貼近于數學概念的計算規則,還在常見的高維數組、字符串處理、國際化支持、元編程等方面提供了強大的支持。尤其是在并行計算、混合編程等方面更是獨具特色,原生地提供了良好的機制,使得這方面的編程工作變得極為快捷便利。 為了能夠讓讀者通過本書了解、認識、掌握Julia語言的基本概念并能付諸實踐,筆者反復對掌握的資料進行了梳理、調整,并且基于真實的運行環境,盡可能地為每個功能點提供相應的示例代碼,以求準確、明晰地闡明各個要點。本書主要內容如下: 第1章介紹Julia語言的基本情況,同時重點介紹Julia運行環境的使用方法。 第2章對編程語言的基礎概念進行了簡單的介紹,能夠幫助讀者在后續的學習中理解Julia語言的特點,對于有經驗的讀者可做選讀內容。 第3章從包括有理數、復數在內的基本數值系統開始,詳細地介紹Julia語言的基本語法。 第4章基于前一章介紹的各種數值類型介紹Julia的各種運算符使用規則。 第5章主要介紹經典的判斷、循環邏輯,還有Julia中較為特別的復合表達式。 第6章介紹類型系統,這是Julia語言的精髓,包括抽象類型、元類型及復合類型等,都有著Julia自己的特點。另外,該章還會重點介紹類型參數化的內容,這也是Julia靈活適應各種應用場景的基礎。該章介紹的元組、字典、集合等結構也是開發Julia程序時常會用到的數集。 第7章介紹函數與方法,這不但是Julia多態分發機制的基礎,也是Julia博采眾長的精華。 第8章介紹Julia被稱為數值計算語言的核心優勢特性——多維數組。數組是科學計算中最為常見的數據結構,但能夠以統一的結構表達向量、矩陣、張量甚至高維空間的機制,卻是Julia的特色。 第9章介紹開發中經常遇到的字符串處理方法,包括常見的正則表達式等。 第10章使我們能夠更深刻地認識Julia中“一切皆對象”的理念,因為通過Symbol與Expr類型的封裝,Julia代碼也是對象的一部分。這章介紹的宏,也是在Julia開發中極為強大的特性。 第11章介紹時間和日期的處理方法。 第12章介紹與IO相關的內容,包括流、文件操作、網絡通信及序列化等。通過該章的學習,我們會再一次為Julia的簡潔、高效所折服。 第13章介紹Julia代碼的組織方式,包括模塊、文件以及包,尤其是對包的管理進行了較為詳盡的闡述。 第14章介紹Julia原生提供的并行計算特性,這也是Julia最具魅力的內容之一。在該章中,我們會詳盡地闡述協程任務、遠程調用及引用,還有數據通道等方面的內容。 第15章可以作為選讀內容,介紹Julia與C/C++、Python進行混合編程的基本方法。不過由于運行環境等方面的約束,在學習該章時,如果要通過實例進行實踐,建議在Linux或MacOS下進行。 第16章給出了對Julia編程方面的經驗總結或優化建議。該章也可作為選讀內容,不過筆者仍建議所有的讀者能認真學習該章內容,并通過實例進行體驗,這樣才能對Julia語言有更為深刻的認識。 第17章以機器學習領域中經典的決策樹算法為例,展示如何用Julia實現該算法的主要過程。在這個實踐中,我們對Julia各種語法技巧的使用會有更切實的認知。 在本書的結尾,以附錄的方式列舉了Julia中常見的異常類型、系統常量以及字符串操作函數,而且對可能有用的第三方包進行了簡單的介紹,希望讀者能夠通過這方面的內容,了解Julia社區的強大力量,習慣性地從社區中獲得各種支持。 另外,在本書撰寫時,為了簡明扼要地將概念闡述清楚,在確保不會影響讀者了解語言的核心應用要點的情況下,在內容上進行了適當縮減。如果讀者想了解更深入的內容,可以通過官網查閱更多的資料進行學習。 本書適合的讀者 本書盡量從基礎知識入手,逐步深入地介紹Julia語言。但因為Julia語言的設計與實現借鑒了眾多先進的理念,所以本書難以進行大而全的闡述,省略了不少內容。所以本書不適合沒有任何編程經驗的讀者,讀者至少要了解面向對象、泛型編程與函數式等編程概念。 由于本書幾乎涉及了Julia語言的方方面面,要點頗多,所以建議讀者在通過本書學習Julia語言時,能夠按照其中的實例,多多動手實踐,并能在實際的編程工作中選用Julia語言,進行一些開發實踐。無論哪一種語言,動手實踐是掌握這門語言的唯一捷徑。 致謝 首先感謝設計與實現Julia語言的近700位貢獻者,為計算機與科學領域提供了一門簡潔易用的語言;也感謝近2000個第三方庫的社區貢獻者,讓Julia語言能夠快速普及,煥發出了蓬勃的生機。 此外,感謝上海交通大學副教授潘漢博士在本書校對期間給予的大力支持。 在本書數月的撰寫過程中,妻子馮瑩霞和家人的支持與照顧讓筆者感動不已,有了她們本書才能夠有機會順利完成,與讀者們相見。感謝她們給予我的一切! |