Julia语言程序设计pdf下载

Julia语言程序设计百度网盘pdf下载

作者:
简介:Julia语言程序设计
出版社:机械工业出版社
出版时间:2018-10-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

内容简介
  本书系统介绍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章给出了编程案例。本书内容丰富,讲解细腻,适合于所有软件开发人员,以及高等院校相关专业师生。
目录
前言
第1章 初识Julia
1.1 有用的资源
1.2 环境准备
1.3 交互式控制台
1.4 命名规则与关键字
1.5 先睹为快
第2章 基础概念
2.1 静态与动态语言
2.2 内存管理
2.3 经典编程范式
第3章 数值系统
3.1 整型
3.2 布尔型
3.3 浮点型
3.4 有理数型
3.5 复数型
3.6 随机数
3.7 任意精度算术
第4章 运算符
4.1 算术运算符
4.2 位运算符
4.3 更新运算符
4.4 比较运算符
4.5 逻辑运算符
4.6 运算优先级
4.7 类型提升
第5章 控制逻辑
5.1 复合表达式
5.2 判断逻辑
5.3 循环逻辑
5.4 异常处理
第6章 类型系统
6.1 类型简介
6.2 抽象类型
6.3 元类型
6.4 类型操作
6.5 复合类型
6.6 类型联合
6.7 TypeVar
6.8 类型参数化
6.9 常用数集
6.10 缺失值的表达
第7章 函数
7.1 基本定义
7.2 参数传递方式
7.3 函数对象
7.4 匿名函数
7.5 参数化方法
7.6 多态分发
7.7 复合类型构造方法
第8章 多维数组
8.1 创建数组
8.2 索引访问
8.3 遍历迭代
8.4 子数组与视图
8.5 稀疏数组
8.6 矢量化计算
8.7 排序
8.8 查找
8.9 missing作为元素
8.10 线性代数中的矩阵处理
第9章 字符串
9.1 字符
9.2 String对象
9.3 变量替换
9.4 正则表达式
9.5 常用操作
9.6 字节数组
9.7 与数值的转换
第10章 元编程
10.1 Symbol类型
10.2 Expr类型
10.3 宏
第11章 时间与日期
11.1 类型
11.2 构造
11.3 访问
11.4 解析
11.5 运算
11.6 属性
第12章 流与IO
12.1 标准流
12.2 文件操作
12.3 读写缓存
12.4 流的回溯
12.5 序列化
12.6 网络通信
第13章 组织结构
13.1 模块
13.2 模块与脚本文件
13.3 变量域
13.4 包
第14章 并行计算
14.1 基础概念
14.2 协程调度
14.3 数据通道
14.4 远程调用与远程引用
14.5 共享数组
14.6 方法小结
第15章 混合编程
15.1 运行外部程序
15.2 调用C/C++
15.3 嵌入C/C++
15.4 与Python互调
第16章 Julia编程规范
16.1 文档注释
16.2 高性能编程建议
16.3 与其他语言的异同
16.4 Julia代码风格
第17章 编程实战
17.1 决策树基本概念
17.2 决策树分类器的实现
17.3 随机森林算法的构建
附录A 内置异常类型
附录B 内置系统常量
附录C 字符串操作函数
附录D 常用包简介
后记
前言
  前言
  几十年前,科学家为了避免处理重复、单调的事情,比如反复地按一套公式计算结果等,发明了计算机。计算机其实是工业自动化的一个产物,可以说是工业化时代的巅峰代表。当时人们怎么也不会想到,计算机的发展带来了互联网,而互联网导致了信息化时代的到来。如今,在数据蔓延、不断渗透的过程中,智能化代表了未来的发展方向。
  与此同时,数据的不断累积、膨胀、延伸引发了计算领域的深刻变化,而且数据的密集性和分布性也提出了大量的计算密集性和分布式要求。很多工业级的生产场景中,在要求开发高效率、维护低成本、运行高可靠的同时,还需要具备高性能的特点。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语言能够快速普及,焕发出了蓬勃的生机。
  此外,感谢上海交通大学副教授潘汉博士在本书校对期间给予的大力支持。
  在本书数月的撰写过程中,妻子冯莹霞和家人的支持与照顾让笔者感动不已,有了她们本书才能够有机会顺利完成,与读者们相见。感谢她们给予我的一切!
精彩书摘
  Julia语言是一种为高性能数值计算设计的高层次动态编程语言,在分布式并行化、精确数值计算等方面提供了独具特色的支持,并包含大量可扩展的数学函数库。尤其是在线性代数、随机数生成、信号处理、字符串处理等方面,Julia集成了众多成熟、优秀的基于C和Fortran开发的开源库,有着很高的性能与效率。另外,Julia的开发者社区已经非常强大,贡献了大量的第三方库,我们可通过内置的包管理器方便地安装使用。
  Julia语言更多的特点还有:
  ·多态分发(Multiple Dispatch)机制,通过不同类型的参数组合,可以定义同名函数不同的行为。
  ·动态类型系统:用户自定义的类型可像内置类型一样快速、轻便。
  ·简洁又可扩展的数值类型转换与提升机制。
  ·高效能的多语言编码环境,支持包括UTF-8在内的各种Unicode编码。
  ·原生设计的并行与分布式计算机制。
  ·轻量级的“绿色”线程—协程机制。
  ·优秀的性能,可以与静态编译的C语言媲美。
  ·Lisp语言式的宏及元编程(Meta-programming)范式的支持。
  ·内置的第三方功能包管理器。
  ·可与Python、R、Matlab及Java等语言进行混合编程。
  ·类似于Shell的外部程序调用。
  ·不需要额外的封装层或特别的API,即可直接调用C语言的库函数。
  可以说Julia在很多方面都独具特色。比如在并行化计算方面,Julia并没有专门设计特殊的语法结构,而是提供了足够灵活的机制,并可自动进行分布式的部署,能够实现云端操作,使得并行化编程极为便捷。
  值得称道的是,Julia语言基于MIT许可证是开源、免费的。而且其生态中的各种库与软件也主要采用GPL、LGPL或BSD等许可。核心代码及各种第三方大部分均托管在GitHub这个有名的开源代码管理平台中,用户可以获得源代码,了解语言的各种实现细节,不但能对语言进行更深入的学习,也能够在设计思路方面受益。
  使用Julia开发有着非常好的体验。不但语法自然简洁,而且结构清晰,效率也非常高。更为可贵的是,其性能也不差。优秀的语言设计结合强大的即时(Just-In-Time,JIT)编译系统LLVM,使得Julia的运行性能在很多时候能够媲美C语言。在一份官方提供的Benchmark中,相比于C、Fortran、Python、Matlab/Octave、R、JavaScript、Java、Lua与Mathematica等其他语言,Julia在性能方面有着非常卓越的表现。
  Julia语言v0.1版发布于2013年2月14日,自2017年12月14日发布v0.6.2版本后,代码更新很快,2018年8月8日发布了v0.7版后,当年8月9日便发布了v1.0的正式版本。经过数次的版本迭代,Julia语言已经日趋成熟,并已经科学计算领域崭露头角。完全可以相信,在不久的将来,在众多的编程语言中,尤其是在科学计算领域方面,Julia必能占有一席之地。
  Julia语言的设计者们显然是聪明的一群人,但笔者认为他们更具有符合时代的智慧。他们在设计实现这门包罗万象又简洁高效的语言时,便建立了开放的包管理机制,从而能够借助强大的开源社区,让Julia以前所未有的速度发展与普及。
  截至本书成稿时,官方注册的包已近2000个,已经成为Julia生态系统的重要组成部分。笔者相信,随着Julia的快速发展,第三方包的规模与质量也会不断地提升。
  Julia的贡献者来自世界各地,提供了大量各自领域有针对性的包,在这些包中要找到我们想要的支持并不困难。为了更好地管理这些包,让这些包更好地服务于各种应用场景,Julia将这些包分成多个频道,列举如下:
  通用类:
  ·JuliaDocs—Julia文档系统相关的包。
  ·Julia-i18n—国际化(i18n)与本地化(L10n)支持。
  ·JuliaTime—日期与时间相关的库。
  ·JuliaPraxis—最佳实践案例与支持。
  ·JuliaEditorSupport—文本编辑器与IDE的扩展及插件。
  ·Juno—基于Atom编辑器的Juno IDE。
  基础计算:
  ·JuliaArrays—自定义的数组类型及相关工具。
  ·JuliaBerry—Raspberry Pi相关的资源与支持组件。
  ·JuliaCI—用于Julia包的持续集成工具。
  ·JuliaGPU—GPU计算支持。
  ·JuliaInterop—与其他语言进行混合编程的相关支持包。
  ·JuliaIO—包括序列化、通信协议及文件格式等IO相关的包。
  ·JuliaParallel—并行与分布式计算支持。
  ·JuliaWeb—Web技术栈
  数学:
  ·JuliaDiff—微分数值计算。
  ·JuliaDiffEq—微分方程求解与分析。
  ·JuliaGeometry—计算几何。
  ·JuliaGraphs—图理论与实现。
  ·JuliaIntervals—计算机精准算术支持。
  ·JuliaMath—包括积分、傅里叶变换、插值等在内的数学包。
  ·JuliaOpt—最优化。
  ·JuliaPolyhedra—多面体计算(polyhedral computation)。
  ·JuliaSparse—稀疏矩阵求解等支持。
  科学:
  ·BioJulia—生物学。
  ·EcoJulia—生态学。
  ·JuliaAstro—天文学。
  ·JuliaDSP—数字信号处理。
  ·JuliaQuant—金融。
  ·JuliaQuantum—量子科学与技术。
  ·JuliaPhysics—物理学。
  ·JuliaDynamics—线性及非线性动态系统、混沌等。
  数据:
  ·JuliaML—机器学习。
  ·JuliaStats—数理与统计。
  ·JuliaImages—图像处理。
  ·JuliaText—自然语言处理、计算语言学及信息检索。
  ·JuliaDatabases—数据库及数据仓库驱动支持。
  ·JuliaData—数据操纵、存取及IO相关。
  可视化:
  ·GiovineItalia—图表支持。
  ·JuliaPlots—数据可视化。
  ·JuliaGL—OpenGL API及其生态。
  ·JuliaGraphics—绘图、色彩及GUI相关支持。
  在官网中,我们可以通过这些频道快速地找到感兴趣的内容。另外,Julia社区提供了论坛、年会等线下活动,也提供Twitter、新闻组等线上方式,帮助开发者参与并了解Julia语言,并能够促进参与者的交流互动。而且在YouTube等平台提供了各种教程,帮助新学者熟悉Julia语言。
  官方提供的开发文档、GitHub中开源的代码,还有耗费心思撰写的本书,都可以成为我们学习这门语言的起点。
精彩插图