0 1 2 3 4

《Python科学计算》第二版出版了

经过 2 年多的修订, Python 科学计算(第 2 版)终于出版了。下面是我目前搜索到的两个网购地址:

http://item.jd.com/10313063651.html

https://world.tmall.com/item/530943582896.htm

相较于第 1 版的改进

在本书第一版出版之后,许多扩展库都有了较大的改进,也诞生了一些新兴的数据处理扩展库。第二版紧跟时代的步伐,增加 IPython Notebook, Pandas 等扩展库的介绍,用一整章的篇幅详细介绍如何用 Cython 提高运算速度。保留第一版中 NumPy 、 Scipy 、 matplotlib 、 Traits 、 TVTK&Mayavi 等扩展库相关章节,大部分章节都有近 50%以上的修改。第一版中 OpenCV 相关的章节中所采用的扩展库目前已经过时,第二版采用 OpenCV 官方提供的扩展库 cv2 。实例章节部分,包含图像处理、推荐系统、自动扫雷等多个全新的实例。

内容简介

本书介绍如何用 Python 开发科学计算的应用程序,除了介绍数值计算之外,还着重介绍了如何制作交互式二维、三维图像,如何设计精巧的程序界面,如何与 C 语言编写的高速计算程序结合,如何编写声音、图像处理算法等内容。本书采用 IPython notebook 编写,所有的程序均能在本书提供的运行环境中正常运行,书中所印刷的图表以及程序输出为均为自动运行的结果,保证了书中所有程序的正确性以及可读性。本书附盘中附带本书所有章节的 IPython notebook ,方便读者再现书中所有实例。

本书目录

[ ]中的数字含义为:[目前的文字数, 代码行数]

Python 科学计算 [336795, 9354]
  Python 科学计算环境的安装与简介 [15579, 198]
  NumPy-快速处理数据 [45457, 813]
  SciPy-数值计算库 [41307, 1325]
  matplotlib-绘制精美的图表 [44207, 1117]
  Pandas-方便的数据分析库 [12462, 219]
  SymPy-符号运算好帮手 [11563, 339]
  Traits & TraitsUI-轻松制作图形界面 [37679, 943]
  TVTK 与 Mayavi-数据的三维可视化 [37885, 999]
  OpenCV-图像处理和计算机视觉 [25245, 566]
  Cython-编译 Python 程序 [26774, 1032]
  实例章节
    使用泊松混合合成图像 [3307, 63]
    推荐算法 [5409, 195]
    物理模拟 [1991, 194]
    频域信号处理 [9479, 364]
    布尔可满足性问题求解器 [9085, 287]
    分形 [9366, 445]

Python科学计算第二版书稿完成

第一版出版之后,就开始着手第二版的编写,今天终于将所有书稿打包发送给出版社了。剩下的任务就是整理光盘中的开发环境、实例代码以及所有章节的Notebook文件。

下面是第二版的章节目录已经各个章节的总字数和实例代码行数的统计结果:

Python科学计算(第二版) [375970, 10469]
  Python科学计算环境的安装与简介 [20258, 293]
   Python简介 [7320, 1]
    Python2还是Python3 [435, 0]
    开发环境 [2759, 1]
    集成开发环境(IDE) [3237, 0]
   IPython Notebook入门 [10639, 242]
    基本操作 [2062, 7]
    魔法(Magic)命令 [3210, 122]
    Notebook的显示系统 [2181, 65]
    定制IPython Notebook [2814, 48]
   扩展库介绍 [2299, 50]
    数值计算库 [453, 5]
    符号计算库 [157, 3]
    绘图与可视化 [472, 11]
    数据处理和分析 [257, 7]
    界面设计 [415, 0]
    图像处理和计算机视觉 [196, 8]
    提高运算速度 [280, 16]
  NumPy-快速处理数据 [47420, 884]
   `ndarray`对象 [12339, 195]
    创建 [552, 13]
    元素类型 [1003, 18]
    自动生成数组 [1903, 22]
    存取元素 [1335, 32]
    多维数组 [2121, 30]
    结构数组 [1815, 45]
    内存结构 [3375, 34]
   ufunc函数 [7356, 105]
    四则运算 [1068, 5]
    比较和布尔运算 [1352, 11]
    自定义ufunc函数 [927, 14]
    广播 [1622, 34]
    ufunc的方法 [1276, 10]
   多维数组的下标存取 [3058, 47]
    下标对象 [416, 5]
    整数数组作为下标 [1257, 24]
    一个复杂的例子 [754, 11]
    布尔数组作下标 [538, 7]
   庞大的函数库 [20445, 442]
    随机数 [1212, 30]
    求和、平均值、方差 [2570, 37]
    大小与排序 [2935, 64]
    统计函数 [1982, 20]
    分段函数 [1996, 29]
    操作多维数组 [1973, 50]
    多项式函数 [1253, 39]
    多项式函数类 [1871, 88]
    各种乘积运算 [1278, 38]
    广义ufunc函数 [3264, 47]
   实用技巧 [3779, 93]
    动态数组 [1635, 35]
    和其它对象共享内存 [1322, 38]
    与结构数组共享内存 [771, 20]
  SciPy-数值计算库 [46299, 1606]
   常数和特殊函数 [1207, 29]
   拟合与优化-optimize [5010, 216]
    非线性方程组求解 [1544, 26]
    最小二乘拟合 [1371, 102]
    计算函数局域最小值 [1452, 66]
    计算全域最小值 [579, 22]
   线性代数-linalg [5688, 125]
    解线性方程组 [1002, 24]
    最小二乘解 [1669, 32]
    特征值和特征向量 [2061, 52]
    奇异值分解-SVD [903, 17]
   统计-stats [9382, 300]
    连续概率分布 [1467, 30]
    离散概率分布 [517, 7]
    核密度估计 [539, 16]
    二项、泊松、伽玛分布 [3222, 127]
    学生t-分布与t检验 [1784, 62]
    卡方分布和卡方检验 [1714, 58]
   数值积分-integrate [8833, 312]
    球的体积 [1152, 18]
    解常微分方程组 [867, 21]
    ode类 [2423, 132]
    信号处理-signal [58, 0]
    中值滤波 [558, 10]
    滤波器设计 [1076, 36]
    连续时间线性系统 [2646, 95]
   插值-interpolate [4407, 168]
    一维插值 [2560, 85]
    多维插值 [1764, 83]
   稀疏矩阵-sparse [2463, 90]
    稀疏矩阵的储存形式 [779, 17]
    最短路径 [1332, 73]
   图像处理-ndimage [4777, 140]
    形态学图像处理 [2263, 94]
    图像分割 [2083, 46]
   空间算法库-spatial [4283, 224]
    计算最近旁点 [2126, 111]
    凸包 [535, 24]
    沃罗诺伊图 [1296, 67]
    德劳内三角化 [269, 22]
  matplotlib-绘制精美的图表 [44216, 1200]
   快速绘图 [7322, 171]
    使用pyplot模块绘图 [1797, 24]
    面向对象方式绘图 [893, 3]
    配置属性 [689, 15]
    绘制多子图 [1692, 37]
    配置文件 [940, 41]
    在图表中显示中文 [1052, 49]
   Artist对象 [6988, 134]
    Artist的属性 [881, 10]
    Figure容器 [1183, 17]
    Axes容器 [1905, 24]
    Axis容器 [1092, 62]
    Artist对象的关系 [614, 10]
   坐标变换和注释 [8174, 125]
    四种坐标系 [1646, 9]
    坐标变换的流水线 [2812, 23]
    制作阴影效果 [452, 18]
    添加注释 [1951, 14]
   块、路径和集合 [4780, 195]
    Path与Patch [913, 16]
    集合 [3806, 179]
   绘图函数简介 [9488, 263]
    对数坐标图 [332, 12]
    极坐标图 [317, 12]
    柱状图 [477, 11]
    散列图 [642, 8]
    图像 [1235, 38]
    等值线图 [1709, 34]
    四边形网格 [890, 38]
    三角网格 [892, 33]
    箭头图 [1717, 65]
    三维绘图 [1130, 12]
   matplotlib技巧集 [7136, 312]
    使用agg后台在图像上绘图 [1207, 58]
    响应鼠标与键盘事件 [3740, 168]
    动画 [1240, 49]
    添加GUI面板 [924, 37]
  Pandas-方便的数据分析库 [30584, 569]
   Pandas中的数据对象 [6456, 94]
    `Series`对象 [769, 10]
    `DataFrame`对象 [2296, 42]
    `Index`对象 [452, 11]
    `MultiIndex`对象 [565, 19]
    常用的函数参数 [987, 1]
    `DataFrame`的内部结构 [1302, 11]
   下标存取 [2684, 23]
    `[]`操作符 [406, 2]
    `.loc[]`和`.iloc[]`存取器 [470, 6]
    获取单个值 [183, 2]
    多级标签的存取 [345, 3]
    `query()`方法 [361, 6]
   文件的输入输出 [3945, 92]
    CSV文件 [1103, 13]
    HDF5文件 [1956, 61]
    读写数据库 [529, 15]
    使用Pickle序列化 [137, 3]
   数值运算函数 [3064, 76]
    字符串处理 [2079, 49]
   时间序列 [5341, 112]
    时间点、时间段、时间间隔 [995, 28]
    时间序列 [1363, 31]
    与`NaN`相关的函数 [1104, 20]
    改变DataFrame的形状 [1775, 33]
   分组运算 [5205, 37]
    `groupby()`方法 [757, 7]
    `GroupBy`对象 [761, 8]
    分组-运算-合并 [3447, 20]
   数据处理和可视化实例 [3741, 133]
    分析Pandas项目的提交历史 [2521, 90]
    分析空气质量数据 [1104, 43]
  SymPy-符号运算好帮手 [13958, 388]
   从例子开始 [2822, 74]
    封面上的经典公式 [848, 13]
    球体体积 [748, 9]
    数值微分 [1170, 52]
   数学表达式 [3415, 81]
    符号 [1031, 14]
    数值 [564, 10]
    运算符和函数 [925, 15]
    通配符 [825, 42]
   符号运算 [3095, 87]
    表达式变换和化简 [1272, 56]
    方程 [246, 4]
    微分 [359, 8]
    微分方程 [491, 9]
    积分 [674, 10]
   输出符号表达式 [2034, 51]
    `lambdify` [431, 12]
    用`autowrap()`编译表达式 [795, 26]
    使用`cse()`分步输出表达式 [718, 13]
   机械运动模拟 [2339, 95]
    推导系统的微分方程 [1284, 33]
    将符号表达式转换为程序 [613, 26]
    动画演示 [194, 36]
  Traits & TraitsUI-轻松制作图形界面 [33290, 995]
   Traits类型入门 [6394, 116]
    什么是Traits属性 [1328, 22]
    Trait属性的功能 [2079, 44]
    Trait类型对象 [883, 28]
    Trait的元数据 [1647, 22]
   Trait类型 [6623, 169]
    预定义的Trait类型 [2843, 38]
    Property属性 [1306, 25]
    Trait属性监听 [1353, 65]
    Event和Button属性 [574, 22]
    动态添加Trait属性 [503, 19]
   TraitsUI入门 [8171, 178]
    缺省界面 [601, 9]
    用View定义界面 [7129, 169]
   用Handler控制界面和模型 [4104, 107]
    用Handler处理事件 [2261, 66]
    Controller和UIInfo对象 [592, 14]
    响应Trait属性的事件 [601, 27]
   属性编辑器 [5424, 274]
    编辑器演示程序 [1282, 70]
    对象编辑器 [2927, 99]
   自定义编辑器 [787, 103]
  函数曲线绘制工具 [2380, 151]
  TVTK与Mayavi-数据的三维可视化 [36357, 1013]
   VTK的流水线(Pipeline) [5030, 63]
    显示圆锥 [1955, 35]
    用ivtk观察流水线 [2981, 28]
   数据集 [6397, 141]
    ImageData [2524, 49]
    RectilinearGrid [684, 18]
    StructuredGrid [1352, 32]
    PolyData [1545, 42]
   TVTK的改进 [1930, 102]
    TVTK的基本用法 [652, 12]
    Trait属性 [323, 7]
    序列化 [156, 15]
    集合迭代 [129, 24]
    数组操作 [286, 14]
   TVTK可视化实例 [9195, 348]
    切面 [3529, 70]
    等值面 [1491, 36]
    流线 [2360, 67]
    计算圆柱的相贯线 [1558, 175]
   用mlab快速绘图 [11126, 192]
    点和线 [1320, 13]
    Mayavi的流水线 [1766, 22]
    二维图像的可视化 [2213, 39]
    网格面mesh [1575, 42]
    修改和创建流水线 [1254, 41]
    标量场 [1565, 14]
    矢量场 [990, 21]
   将TVTK和Mayavi嵌入到界面中 [2022, 162]
    TVTK场景的嵌入 [713, 55]
    Mayavi场景的嵌入 [1178, 107]
  OpenCV-图像处理和计算机视觉 [31505, 899]
   图像的输入输出 [4297, 128]
    读入并显示图像 [1088, 15]
    图像类型 [681, 42]
    图像输出 [686, 22]
    字节序列与图像相互转换 [494, 10]
    视频输出 [929, 22]
    视频输入 [308, 17]
   图像处理 [5105, 49]
    二维卷积 [1506, 30]
    形态学运算 [1334, 2]
    填充-floodFill [1413, 15]
    去瑕疵-inpaint [747, 2]
   图像变换 [8465, 346]
    几何变换 [1460, 50]
    重映射-remap [1702, 73]
    直方图 [2493, 100]
    二维离散傅立叶变换 [1498, 49]
    用双目视觉图像计算深度信息 [1244, 74]
   图像识别 [7475, 174]
    用Hough变换检测直线和圆 [2921, 74]
    图像分割 [2091, 41]
    SURF特征匹配 [2404, 59]
   形状与结构分析 [2385, 131]
    轮廓检测 [1552, 72]
    轮廓匹配 [760, 59]
   类型转换 [3602, 69]
    分析cv2的源程序 [1521, 57]
    `Mat`对象 [1334, 4]
    在`cv`和`cv2`之间转换图像对象 [504, 8]
  Cython-编译Python程序 [29520, 1040]
   配置编译器 [1144, 17]
   Cython入门 [7248, 130]
    计算矢量集的距离矩阵 [645, 56]
    将Cython程序编译成扩展模块 [974, 22]
    C语言中的Python对象类型 [1389, 12]
    使用cdef关键字声明变量类型 [2862, 18]
    使用def定义函数 [831, 12]
    使用cdef定义C语言函数 [457, 10]
   高效处理数组 [3963, 219]
    Cython的内存视图 [2638, 87]
    用降采样提高绘图速度 [1251, 132]
   使用Python标准对象和API [2219, 78]
    操作`list`对象 [1028, 26]
    创建`tuple`对象 [242, 31]
    用`array.array`作动态数组 [853, 21]
   扩展类型 [6153, 329]
    扩展类型的基本结构 [884, 30]
    一维浮点数向量类型 [2091, 113]
    包装ahocorasick库 [2970, 186]
   Cython技巧集 [8299, 267]
    创建ufunc函数 [3205, 83]
    快速调用DLL中的函数 [1482, 64]
    调用BLAS函数 [3532, 120]
 实例 [42563, 1582]
   使用泊松混合合成图像 [3773, 65]
    泊松混合算法 [1460, 0]
   编写代码 [1747, 63]
   演示程序 [419, 2]
   经典力学模拟 [4426, 207]
    悬链线 [1836, 115]
    最速降线 [972, 40]
    单摆模拟 [1554, 52]
   推荐算法 [5878, 183]
    读入数据 [567, 31]
    推荐性能评价标准 [427, 12]
    矩阵分解 [1431, 21]
    使用最小二乘法实现矩阵分解 [2232, 50]
    使用Cython迭代实现矩阵分解 [1139, 69]
   频域信号处理 [9457, 365]
    FFT知识复习 [1660, 29]
    合成时域信号 [809, 57]
    观察信号的频谱 [4835, 150]
    卷积运算 [2004, 129]
   布尔可满足性问题求解器 [9872, 309]
    用Cython包装PicoSAT [2434, 111]
    数独游戏 [2412, 64]
    扫雷游戏 [3007, 109]
   分形 [9117, 453]
    Mandelbrot集合 [2162, 103]
    迭代函数系统 [3355, 129]
    L-System分形 [1008, 107]
    分形山脉 [2391, 114]


《Python科学计算》第二版视频

《Python科学计算》第二版的编写已经过半,这次完全使用IPython Notebook编写,预计完成之后使用pandoc将其转换成Word文档,这样能保证所有代码和输出都是经过运行检验的。

本书的所有实例程序都放到github上了:https://github.com/ruoyu0088

我上传了一个介绍《Python科学计算》第二版编写环境的视频:
https://www.youtube.com/watch?v=_vL6n947hFY

方便在Notebook中写书的魔法命令

在Cython ctypes cffi numba之间传递函数地址


把照片转换成圆形马赛克效果
https://www.youtube.com/watch?v=tveFdlIRegE

自动计算接触角
https://www.youtube.com/watch?v=JfkdfJ2eahQ

用Cython调用Scipy中的blas扩展模块
https://www.youtube.com/watch?v=4Kqmo1ozvh8

下面是本书中的一些实例截图:


本站的文章投稿支持IPython Notebook链接

IPython Notebook目前已成正为了十分流行的Python文章的编写格式。很多Python技术博客的博文都是采用IPython Notebook编写,然后通过nbconvert进行转换。nbconvert转换之后的HTML文件可以内嵌图片,省去了一一上传图片的麻烦。

本站的文章投稿开始支持IPython notebook链接。只需要在文章的正文输入框的第一行输入IPython Notebook的地址即可,地址需要以http://或者https://开头。

查看转换程序


一些有关Python的近况

ChinaUnix社区访谈录

最近ChinaUnix通过邮件对我进行了一次有关Python科学计算方面的采访,下面是公布的内容:

专题页面:http://www.it168.com/redian/python/index.html

访谈录:http://bbs.chinaunix.net/thread-3748879-1-1.html

我在ChinaUnix上的博客也升级为VIP,日后在这里发表的文章会同步更新到这个博客上去。

Python学习会

Python对我的工作帮助很大,经过多年的积累,最近终于能在研究室内部推广Python了,而更多的新项目我也可以采用Python开发了。现在每两个星期举行一次Python学习会,每次我都用比较蹩脚的日语向大家详解Python近2个小时,基本上能把要表达的东西讲清楚。

学习会从Python的基础开始,准备了不少资料,以后有时间把它们翻译成中文。

在Ubuntu上安装Python

最近新购入了一台i5的笔记本电脑,速度比现有的笔记本提高了不少。我已在此笔记本上安装了Ubuntu系统,并安装了Python 2.7和Python 3.2以及所有能安装的科学计算方面的扩展库。准备花些时间学习Python 3.2,然后在这台电脑上录制一些Python相关的视频,主要还是先考虑在Windows 7下采用Python(x,y)。


《Python科学计算》相关链接

今天上网搜索,发现出版社已经开始做一些宣传工作了。下面是相关的链接:

豆丁网在线阅读前109页,需要10个豆元。不过即使你没有豆元也可以阅读到Eric Jones 为本书作的序。感谢Eric在百忙中为本书作序,虽然他不懂中文,他还是在通过书中的插图和代码详细地了解本书的内容之后,才开始作序,因此花了不少时间。

豆瓣网的本书页面,感谢清华大学出版社对本书的支持和宣传。

下面是本书的封面,我也是第一次看到,感觉很不错:



好事多磨

这几天海月爸爸早上一睁开眼睛就看邮箱,看有没有他想要的邮件。他在等一个Python小组的CEO给他的书写的序。今天早上终于有了回音,原因CEO在忙着准备即将在印度举行的会议上要用的发言稿,所以才没有如约完成序。不过总算有了盼头,据说下星期一之前就应该可以把序发给海月她爸了。这本书消耗了海月爸爸两年多的业余时间,海月爸爸说:看着这本书里的内容,他可以想起来它们是在去什么地方玩或在哪个饭店吃饭的时候写的。

虽然海月爸爸知道这本书不会成为畅销书,但他为了在国内倡导大家不要使用盗版软件,而是使用免费的开源软件而做一点贡献,认为出这本书是非常有意义的。 他还说想把这本书的收入捐给中国那些可怜的孩子们和一些Python的会议,我其实希望他把钱捐给身边离他最近的一直为他服务的人。


Python科学计算习题集

为了让《Python科学计算》的读者能学以致用,我准备在等待本书出版期间,陆续编写一些习题。每个习题都将有较详细的说明和辅助代码,让读者能够专心于问题的关键点。忙活了一个多星期,目前已经有8篇习题,我个人认为其中有些内容还十分有趣。请感兴趣的朋友们抽一些时间解题试试看,如果有问题可以发邮件给我:ruoyu0088 at gmail.com,或在本书的哲思论坛上留言:http://www.zeuux.org/group/scipython/

为了让读者在这些习题上花费更多的精力,暂时不提供参考答案的下载。

Python科学计算习题集:http://hyry.dip.jp/scipyex


用Sphinx写书

写技术书是一件十分费时费力的事情,作者不但需要编写有趣的内容,还需要用标准且美观大方的格式呈现内容。在编写《Python科学计算》一书的过程中,我尝试使用Sphinx、Leo、MiKTeX等软件,拼凑出了一套适合编写技术书籍和文档的编写环境。这本书是关于这个编写环境的一些介绍。

在线阅读版: http://hyry.dip.jp/sphinxbook

PDF版:http://hyry.dip.jp/files/sphinxdoc.pdf

 写书环境下载:http://hyry.dip.jp/files/books.zip

目前写书环境以及本书还在开发和编写之中。 写书环境只能在Windows系统下使用。


《Python科学计算》书稿完成

《用Python做科学计算》已经改名为 《Python科学计算》

经过几个月的修改,《Python科学计算》的书稿终于完成了。以下是关于本书的一些数据:

历时23个月,622页,262千字,19章,266幅插图,360个实例程序,393份问卷调查。

本书所有插图的索引图:

http://hyry.dip.jp/files/pydoc_pic.png

立志编写本书的博文:

http://hyry.dip.jp/blogt.py?file=0317.blog


0 1 2 3 4