万本电子书0元读

万本电子书0元读

顶部广告

Python高性能编程电子书 租阅

Python代码仅仅能够正确运行还不够,你需要让它运行得更快。通过探索设计决策背后的基础理论,本书帮助你更加深刻地理解Python的实现。你将学习如何找到性能瓶颈,以及如何在大数据量的程序中显著加快代码。 如何利用多核架构或集群的优?如何构建一个在不损失可靠性的情况下具备可伸缩性的系统?有经验的Python程序员将学到针对这些问题或者其他问题的具体解决方案,以及来自那些在社交媒体分析、产品化机器学习和其他场景下使用高性能Python编程的公司的成功案例。

售       价:¥

纸质售价:¥62.40购买纸书

1086人正在读 | 3人评论 6.6

作       者:(美) Micha Gorelick 戈雷利克 Ian Ozsvald 欧日沃尔德

出  版  社:人民邮电出版社

出版时间:2017-09-01

字       数:29.7万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:此类商品不支持退换货,不支持下载打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(3条)
  • 读书简介
  • 目录
  • 累计评论(3条)
Python语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理、机器学习、科学计算、推荐系统构建等。 本书共有12章,围绕如何行代码优化和加快实际应用的运行速度行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。*后,通过一系列真实案例展现了在应用场景中需要注意的问题。 本书适合初级和中级Python程序员、有一定Python语言基础想要得到阶和提高的读者阅读。 Python语言是一种脚本语言,其应用领域非常广泛,包括数据分析、自然语言处理、机器学习、科学计算、推荐系统构建等。 本书共有12章,围绕如何行代码优化和加快实际应用的运行速度行详细讲解。本书主要包含以下主题:计算机内部结构的背景知识、列表和元组、字典和集合、迭代器和生成器、矩阵和矢量计算、并发、集群和工作队列等。*后,通过一系列真实案例展现了在应用场景中需要注意的问题。 本书适合初级和中级Python程序员、有一定Python语言基础想要得到阶和提高的读者阅读。
【推荐语】
Python代码仅仅能够正确运行还不够,你需要让它运行得更快。通过探索设计决策背后的基础理论,本书帮助你更加深刻地理解Python的实现。你将学习如何找到性能瓶颈,以及如何在大数据量的程序中显著加快代码。 如何利用多核架构或集群的优?如何构建一个在不损失可靠性的情况下具备可伸缩性的系统?有经验的Python程序员将学到针对这些问题或者其他问题的具体解决方案,以及来自那些在社交媒体分析、产品化机器学习和其他场景下使用高性能Python编程的公司的成功案例。 通过阅读本书,你将能够: ■ 更好地掌握numpy、Cython和剖析器; ■ 了解Python如何抽象化底层的计算机架构; ■ 使用剖析手段来寻找CPU时间和内存使用的瓶颈; ■ 通过选择合适的数据结构来编写高效的程序 ■ 加速矩阵和矢量计算; ■ 使用工具把Python编译成机器代码; ■ 管理并发的多I O和计算操作; ■ 把多程代码转换到在本地或者远程集群上运行; ■ 用更少的内存解决大型问题。 “ 尽管P y thon在学术和工业领域很流行, 但人们也经常由于Python程序运行太慢而放弃它。本书通过全面介绍改善优化Python计算速度和可扩展性的策略,从而消除人们的这种误 解。”——Jake VanderPlas 华盛顿大学
【作者】
Micha Gorelick在bitly公司从事与数据交道的工作,并负责建立了快速前实验室(Fast Forward Labs),研究从机器学习到高性能流算法领域的问题。 Ian Ozsvald是ModelInsight.io的数据科学家和教师,有着超过十年的Python经验。他在yCon和PyData会议上教授Python编程,这几年一直在英国从事关于数据科学和高性能计算方面的咨询工作。
目录展开

内容提要

前言

作者简介

封面简介

第1章 理解高性能Python

1.1 基本的计算机系统

1.1.1 计算单元

1.1.2 存储单元

1.1.3 通信层

1.2 将基本的元素组装到一起

理想计算模型和Python虚拟机

1.3 为什么使用Python

第2章 通过性能分析找到瓶颈

2.1 高效地分析性能

2.2 Julia集合的介绍

2.3 计算完整的Julia集合

2.4 计时的简单方法——打印和修饰

2.5 用UNIX的time命令进行简单的计时

2.6 使用cProfile模块

2.7 用runsnakerun对cProfile的输出进行可视化

2.8 用line_profiler进行逐行分析

2.9 用memory_profiler诊断内存的用量

2.10 用heapy调查堆上的对象

2.11 用dowser实时画出变量的实例

2.12 用dis模块检查CPython字节码

不同的方法,不同的复杂度

2.13 在优化期间进行单元测试保持代码的正确性

No-op的@profile修饰器

2.14 确保性能分析成功的策略

2.15 小结

第3章 列表和元组

3.1 一个更有效的搜索

3.2 列表和元组

3.2.1 动态数组:列表

3.2.2 静态数组:元组

3.3 小结

第4章 字典和集合

4.1 字典和集合如何工作

4.1.1 插入和获取

4.1.2 删除

4.1.3 改变大小

4.1.4 散列函数和熵

4.2 字典和命名空间

4.3 小结

第5章 迭代器和生成器

5.1 无穷数列的迭代器

5.2 生成器的延迟估值

5.3 小结

第6章 矩阵和矢量计算

6.1 问题介绍

6.2 Python列表还不够吗

分配次数太多带来的问题

6.3 内存碎片

6.3.1 理解perf

6.3.2 根据perf输出做出抉择

6.3.3 使用numpy

6.4 用numpy解决扩散问题

6.4.1 内存分配和就地操作

6.4.2 选择优化点:找到需要被修正的地方

6.5 numexpr:让就地操作更快更简单

6.6 告诫故事:验证你的“优化”(scipy)

6.7 小结

第7章 编译成C

7.1 可能获得哪种类型的速度提升

7.2 JIT和AOT编译器的对比

7.3 为什么类型检查有助代码更快运行

7.4 使用C编译器

7.5 复习Julia集的例子

7.6 Cython

7.6.1 使用Cython编译纯Python版本

7.6.2 Cython注解来分析代码块

7.6.3 增加一些类型注解

7.7 Shed Skin

7.7.1 构建扩展模块

7.7.2 内存拷贝的开销

7.8 Cython和numpy

在一台机器上使用OpenMP来做并行解决方案

7.9 Numba

7.10 Pythran

7.11 PyPy

7.11.1 垃圾收集的差异

7.11.2 运行PyPy并安装模块

7.12 什么时候使用每种工具

7.12.1 其他即将出现的项目

7.12.2 一个图像处理单元(GPU)的注意点

7.12.3 一个对未来编译器项目的展望

7.13 外部函数接口

7.13.1 ctypes

7.13.2 cffi

7.13.3 f2py

7.13.4 CPython模块

7.14 小结

第8章 并发

8.1 异步编程介绍

8.2 串行爬虫

8.3 gevent

8.4 tornado

8.5 AsyncIO

8.6 数据库的例子

8.7 小结

第9章 multiprocessing模块

9.1 multiprocessing模块综述

9.2 使用蒙特卡罗方法来估算pi

9.3 使用多进程和多线程来估算pi

9.3.1 使用Python对象

9.3.2 并行系统中的随机数

9.3.3 使用numpy

9.4 寻找素数

工作队列

9.5 使用进程间通信来验证素数

9.5.1 串行解决方案

9.5.2 Naïve Pool解决方案

9.5.3 Less Naïve Pool解决方案

9.5.4 使用Manager.Value作为一个标记

9.5.5 使用Redis作为一个标记

9.5.6 使用RawValue作为一个标记

9.5.7 使用mmap作为一个标记

9.5.8 使用mmap作为一个标记的终极效果

9.6 用multiprocessing来共享numpy数据

9.7 同步文件和变量访问

9.7.1 文件锁

9.7.2 给Value加锁

9.8 小结

第10章 集群和工作队列

10.1 集群的益处

10.2 集群的缺陷

10.2.1 糟糕的集群升级策略造成华尔街损失4.62亿美元

10.2.2 Skype的24小时全球中断

10.3 通用的集群设计

10.4 怎样启动一个集群化的解决方案

10.5 使用集群时避免痛苦的方法

10.6 三个集群化解决方案

10.6.1 为简单的本地集群使用Parallel Python模块

10.6.2 使用IPython Parallel来支持研究

10.7 为鲁棒生产集群的NSQ

10.7.1 队列

10.7.2 发布者/订阅者

10.7.3 分布式素数计算器

10.8 看一下其他的集群化工具

10.9 小结

第11章 使用更少的RAM

11.1 基础类型的对象开销高

Array模块以廉价的方式存储了许多基础对象

11.2 理解集合中的RAM使用

11.3 字节和Unicode的对比

11.4 高效地在RAM中存储许多文本

在800万个符号上尝试这些方法

11.5 使用更少RAM的窍门

11.6 概率数据结构

11.6.1 使用1字节的Morris计数器来做近似计数

11.6.2 K最小值

11.6.3 布隆过滤器

11.6.4 LogLog计数器

11.6.5 真实世界的例子

第12章 现场教训

12.1 自适应实验室(Adaptive Lab)的社交媒体分析(SoMA)

12.1.1 自适应实验室(Adaptive Lab)使用的Python

12.1.2 SoMA的设计

12.1.3 我们的开发方法论

12.1.4 维护SoMA

12.1.5 对工程师同行的建议

12.2 使用RadimRehurek.com让深度学习飞翔

12.2.1 最佳时机

12.2.2 优化方面的教训

12.2.3 总结

12.3 在Lyst.com的大规模产品化的机器学习

12.3.1 Python在Lyst的地位

12.3.2 集群设计

12.3.3 在快速前进的初创公司中做代码评估

12.3.4 构建推荐引擎

12.3.5 报告和监控

12.3.6 一些建议

12.4 在Smesh的大规模社交媒体分析

12.4.1 Python在Smesh中的角色

12.4.2 平台

12.4.3 高性能的实时字符串匹配

12.4.4 报告、监控、调试和部署

12.5 PyPy促成了成功的Web和数据处理系统

12.5.1 先决条件

12.5.2 数据库

12.5.3 Web应用

12.5.4 OCR和翻译

12.5.5 任务分发和工作者

12.5.6 结论

12.6 在Lanyrd.com中的任务队列

12.6.1 Python在Lanyrd中的角色

12.6.2 使任务队列变高性能

12.6.3 报告、监控、调试和部署

12.6.4 对开发者同行的建议

累计评论(3条) 7个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部