程序员数学:用Python学透线性代数和微积分pdf电子书提取码

科普读物 数理化 [美]保罗·奥兰德(Paul Orland)
简介: 本书带领程序员使用自己熟知的工具,即代码,来理解机器学习和游戏设计中的数学知识。

献词

献给我的第一位数学老师和第一位编程老师——我的父亲。

译者序

程序员应不应该有一定的数学功底,这是一个老生常谈的问题。

比起循序渐进地学习数学知识,很多程序员是在遇到跟数学相关的问题时才去主动了解的。这可能是因为某些知识早就成了尘封的记忆,也可能是因为那些知识从来没有出现在他们的视野之中。

虽然这种“遇到问题解决问题”的学习方法会让人陷入短暂的自我否定之中,但是等到真正掌握了某个数学知识点,那种“久旱逢甘霖”的感觉会让人非常快乐。为了延续这种快乐,有的人从箱子里翻出了当年的高等数学、线性代数以及概率论与数理统计教材,但翻了几页之后又重归自我否定;还有的人会继续这种临时抱佛脚的学习模式,从而进入“盲人摸象”模式:了解了许多知识点,却始终不能形成完整的知识网络。

于是本书的出现就非常必要了——它让作为程序员的读者,从程序员的角度、以程序员易于理解的方式来学习数学。

我相信大部分读者看到书名,就会联想到结城浩的《程序员的数学》系列图书。从书名上来讲,本书少了一个“的”字并不是为了避嫌(毕竟《程序员的数学》中文译本也出自图灵公司),而是恰到好处地给予了一种隐喻——这本书对数学知识的讲解更为直接。

比起完全的启发式写作,本书作者更关注读者是否真正掌握了相关的数学知识,主要体现在以下三点。

·本书作者规划了详细的学习路径——从基础的向量计算到最终的神经网络训练,基本涵盖了业务工程师和初级算法工程师所需了解的所有数学知识。

·作者的写作基于大量的代码片段,且以Jupyter Notebook为载体,读者可以直接把学到的数学知识转化为代码。当然,作为读者的你也不必有太大的心理负担,本书中的代码完全遵循“够用就好”的原则,不会增加额外的学习开销。

·作者为各章添加了大量的练习(事实上,很少见到一本书里有这么多练习)。这些练习既有开放式的提问,又有针对正文内容的扩展和提升。

综上所述,本书的阅读体验很棒,学习曲线十分平缓,并且章节之间环环相扣。最关键的是,就像作者在第1章中提到的,它能帮你通过代码来学习数学,并且用包含数学知识的代码来解决实际问题。

说到本书的翻译,首先要感谢把本书引入国内的图灵公司编辑谢婷婷,让译者和读者有机会跟着作者的思路重新梳理跟编程相关的数学知识。

当然,还要感谢参与本书翻译的工程师们。

他们来自百度KFive,这是一个人数众多、负责手机百度等移动端产品开发的大前端技术团队。在平时的业务开发中,无论是日常产品功能的实现,还是涉及专业的端智能、前端智能化、视频图像处理和可视化等领域,都让团队中的同学或多或少感受到了数学知识不足的困扰。因此,这次翻译对于译者们来说也算是一次知识升级——诚如作者所言,通过代码重新发现了数学之美。

这里列出参与本书翻译的同学(按照章节顺序):熊贤仁、范雨蓉、毕营帅、吴艳、樊中恺、梅旭光、岳双燕、杨珺(同时承担整体审校工作)、张静媛。

话不多说,让我们跟随代码的指引,开启美妙的数学之旅吧。

前言

2017年,担任Tachyus公司CTO(首席技术官)的我开始了本书的写作。这家公司是我创立的,主要业务是为石油和天然气公司编写预测分析软件。当时,我们已经完成了核心产品的构建:一个基于物理学和机器学习的流体流动模拟器,以及一个优化引擎。这些工具能让我们的客户展望储油层的未来动态,并帮助他们发现价值数亿美元的优化机会。

随着一些大型跨国公司开始使用我们的软件,我作为CTO的任务是将这款软件产品化并进行推广。我们面临的挑战不仅是开发一个复杂的软件项目,还要编写很多与数学相关的代码。大概就在那个时候,公司设立了一个叫作“科学软件工程师”的职位。我们的想法是,专业的软件工程师既需要过硬的技术,还要有扎实的数学、物理学和机器学习背景。在寻找和招聘科学软件工程师的过程中,我意识到这种人才非常稀缺但需求量很大。我们的软件工程师也意识到了这一点,他们希望提升自己的数学技能,为公司技术栈中特定领域的后端部分贡献代码。除了团队中已经有很多渴望学习数学的人,我们在招聘过程中也发现了不少人愿意学习数学。这促使我开始思考,如何将一位优秀的软件工程师培训成能够出色利用数学知识的人。

版权:人民邮电出版社