Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2726
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-10 17:23
文章分类

全部博文(2)

文章存档

2015年(2)

我的朋友
最近访客

分类: Python/Ruby

2015-06-10 17:50:01

写了一个小程序分析《Python科学计算》第二版目前的状态。在下面的目录中,[ ]中的两个数字分别表示章节的文字数和示例代码行数。上级目录的的数字和下级目录中的合计。目前全书有32万字,9100行示例代码。

点击(此处)折叠或打开

  1. import os
  2. from os import path
  3. import re
  4. import IPython.nbformat.current as nf

  5. def iter_notebooks():
  6.     for folder, subfolder, files in os.walk(".."):
  7.         name = path.basename(folder)
  8.         if re.match(r"\d+-\w+", name):
  9.             for fn in files:
  10.                 if fn.startswith("_"):
  11.                     continue
  12.                 if re.match(r"\w+-\d\d\d-.+?\.ipynb", fn):
  13.                     fn = path.join(folder, fn)
  14.                     yield path.abspath(fn)

  15.                     
  16. class Heading(object):
  17.     def __init__(self, level, title):
  18.         self.level = level
  19.         self.title = title
  20.         self.text_count = 0
  21.         self.code_line = 0
  22.         self.children = []
  23.         
  24.     def append_text(self, count):
  25.         self.text_count += count
  26.         
  27.     def append_code(self, count):
  28.         self.code_line += count
  29.         
  30.     def append_heading(self, heading):
  31.         self.children.append(heading)
  32.     
  33.     @property
  34.     def total_count(self):
  35.         return self.text_count + sum(h.total_count for h in self.children)
  36.     
  37.     @property
  38.     def total_line(self):
  39.         return self.code_line + sum(h.total_line for h in self.children)
  40.         
  41. root = Heading(0, u"Python科学计算")
  42. stack = [root]
  43.         
  44. for fn in iter_notebooks():
  45.     with open(fn, "rb") as f:
  46.         nb = nf.read(f, "json")
  47.         first_heading = False
  48.         for cell in nb["worksheets"][0]["cells"]:
  49.             cell_type = cell["cell_type"]
  50.             if cell_type == "heading":
  51.                 first_heading = True
  52.             if not first_heading:
  53.                 continue
  54.                 
  55.             if cell_type == "markdown":
  56.                 stack[-1].append_text(len(cell["source"]))
  57.             elif cell_type == "code":
  58.                 stack[-1].append_code(len(cell["input"].split("\n")))
  59.             elif cell_type == "heading":
  60.                 level = cell["level"]
  61.                 heading = Heading(level, cell["source"])
  62.                 while level <= stack[-1].level:
  63.                     stack.pop()
  64.                 stack[-1].append_heading(heading)
  65.                 stack.append(heading)

  66. def output(heading, level=0):
  67.     if level == 1:
  68.         print
  69.     print u" "*level + heading.title + " [%d, %d]" % (heading.total_count, heading.total_line)
  70.     for h in heading.children:
  71.         output(h, level+1)
  72.         
  73. output(root)
下面是程序的输出:

Python科学计算 [327659, 9154]

  Python科学计算环境的安装与简介 [13131, 206]
    Python简介 [4899, 9]
      Python2还是Python3 [264, 0]
      开发环境 [1098, 1]
        WinPython [823, 1]
        Anaconda [141, 0]
      IDE [2483, 8]
        Spyder [2483, 8]
        Pycharm [0, 0]
    IPython Notebook入门 [5929, 156]
      基本操作 [2669, 30]
        运行IPython Notebook [691, 0]
        操作单元 [581, 0]
        安装MathJax [371, 7]
        操作运算进程 [684, 11]
        在线帮助和自动完成 [342, 12]
      魔法(Magic)命令 [1886, 63]
        显示matplotlib图表 [636, 10]
        性能分析 [833, 43]
        代码调试 [237, 10]
      Notebook的显示系统 [1206, 63]
        display模块 [310, 23]
        自定义对象的显示格式 [797, 40]
    扩展库介绍 [2303, 41]
      数值计算库 [539, 5]
      符号计算库 [158, 3]
      绘图与可视化 [440, 9]
      数据处理和分析 [257, 6]
      界面设计 [416, 0]
      图像处理和计算机视觉 [190, 8]
      提高运算速度 [234, 10]

  NumPy-快速处理数据 [45457, 813]
    ndarray对象 [12185, 196]
      创建 [550, 13]
      元素类型 [998, 19]
      自动生成数组 [1852, 21]
      存取元素 [1250, 32]
      多维数组 [2154, 30]
      结构数组 [1780, 46]
      内存结构 [3365, 34]
    ufunc函数 [7478, 106]
      四则运算 [1071, 5]
      比较和布尔运算 [1349, 11]
      自定义ufunc函数 [960, 14]
      广播 [1645, 33]
      ufunc的方法 [1317, 10]
    多维数组的下标存取 [3015, 45]
      下标对象 [414, 5]
      整数数组作为下标 [1202, 24]
      一个复杂的例子 [827, 9]
      布尔数组作下标 [479, 7]
    庞大的函数库 [18693, 360]
      随机数 [1212, 30]
      求和、平均值、方差 [2541, 39]
      大小与排序 [2940, 65]
      统计函数 [2001, 20]
      分段函数 [2068, 29]
      操作多维数组 [1984, 52]
      多项式函数 [1254, 30]
      多项式类 [277, 14]
      各种乘积运算 [1294, 36]
      广义ufunc函数 [3011, 45]
    实用技巧 [3640, 104]
      动态数组 [1540, 35]
      和其它对象共享内存 [1320, 38]
      与结构数组共享内存 [780, 20]
      利用缓存提高数组访问速度 [0, 11]

  SciPy-数值计算库 [41307, 1325]
    常数和特殊函数 [1199, 27]
    拟合与优化-optimize [4980, 199]
      非线性方程组求解 [1499, 26]
      最小二乘拟合 [1379, 95]
      计算的函数局域最小值 [1473, 56]
      计算全域最小值 [566, 22]
    线性代数-linalg [5629, 117]
      解线性方程组 [953, 24]
      最小二乘解 [1646, 29]
      特征值和特征向量 [2109, 49]
      奇异值分解-SVD [868, 15]
    统计-stats [8703, 247]
      连续和离散概率分布 [2421, 47]
      二项、泊松、伽玛分布 [3303, 101]
      学生t-分布与t检验 [1500, 56]
      卡方分布和卡方检验 [1340, 43]
    数值积分-integrate [8826, 317]
      球的体积 [1153, 17]
      解常微分方程组 [904, 24]
      ode类 [2465, 125]
      信号处理-signal [81, 0]
      中值滤波 [558, 11]
      滤波器设计 [1179, 48]
      连续时间线性系统 [2398, 92]
    插值-interpolate [4210, 159]
      一维插值 [2501, 83]
        外推和Spline拟合 [1119, 42]
        参数插值 [513, 14]
        单调插值 [166, 12]
      多维插值 [1628, 76]
    稀疏矩阵-sparse [2379, 89]
      稀疏矩阵的储存形式 [780, 17]
      最短路径 [1242, 72]
    图像处理-ndimage [5132, 168]
      图像滤波 [341, 28]
        热点图 [309, 28]
      形态学图像处理 [2287, 89]
        膨胀和腐蚀 [911, 26]
        Hit和Miss [1224, 44]
      图像测量 [2225, 51]

  matplotlib-绘制精美的图表 [44207, 1116]
    快速绘图 [7166, 133]
      使用pyplot模块绘图 [2120, 28]
      面向对象方式绘图 [939, 3]
      配置属性 [694, 18]
      绘制多子图 [1363, 26]
      配置文件 [931, 16]
      在图表中显示中文 [1119, 42]
    Artist对象 [7245, 131]
      Artist的属性 [886, 6]
      Figure容器 [1192, 14]
      Axes容器 [2009, 27]
      Axis容器 [1123, 66]
      Artist对象的关系 [714, 8]
    坐标变换和注释 [8924, 128]
      四种坐标系 [1604, 9]
      坐标变换的流水线 [3464, 23]
      制作阴影效果 [482, 18]
      添加注释 [2112, 17]
    块、路径和集合 [4522, 185]
      Path与Patch [803, 15]
      集合 [3719, 170]
        曲线集合(LineCollection) [878, 76]
        多边形集合(PolyCollection) [301, 27]
        路径集合(PathCollection) [468, 13]
        椭圆集合(EllipseCollection) [932, 18]
        数据空间中的圆形集合对象 [472, 36]
    绘图函数简介 [7031, 161]
      对数坐标图 [391, 12]
      极坐标图 [318, 12]
      柱状图 [479, 10]
      散列图 [663, 8]
      图像 [1259, 38]
      等值线图 [1664, 34]
      四边形网格 [871, 35]
      三维绘图 [1239, 12]
    绘图后台 [3325, 298]
      使用agg后台在图像上绘图 [306, 148]
      响应事件 [2971, 150]
        键盘事件 [725, 26]
        鼠标事件 [942, 57]
        点选事件 [365, 17]
        实时高亮显示曲线 [850, 50]
    事件、动画与控件 [5585, 80]
      动画 [1251, 49]
        使用缓存快速重绘图表 [503, 17]
        animation模块 [493, 17]
      控件 [4204, 31]
        分析Cursor的代码 [3906, 18]
        图像遮罩绘制控件 [132, 12]

  Pandas-方便的数据分析库 [11027, 199]
    分析Pandas项目的提交历史 [3276, 43]
      按月统计 [757, 13]
      按作者统计 [1078, 17]
    Pandas中的数据对象 [3730, 44]
      Series对象 [1586, 21]
      DataFrame对象 [640, 0]
      Index对象 [322, 7]
      DataFrame的内部结构 [1182, 16]
    下标存取 [1284, 14]
    内部提速函数 [2479, 97]
      获取第N小的元素 [215, 7]
      中值滤波 [713, 30]
      HashTable [630, 12]
      对象数组相关的函数 [478, 9]
      药剂反应实验数据分析 [266, 39]

  SymPy-符号运算好帮手 [6865, 161]
    从例子开始 [4244, 3]
      封面上的经典公式 [4188, 3]
    机械运动学模拟 [2362, 158]
      推导系统的微分方程 [909, 32]
      将符号表达式转换为程序 [1118, 87]
      动画演示 [192, 36]

  Traits & TraitsUI-轻松制作图形界面 [37679, 943]
    Traits类型入门 [6649, 116]
      开发背景 [1822, 22]
      Trait属性的功能 [2203, 44]
      Trait类型对象 [921, 28]
      Trait的元数据 [1703, 22]
    Trait类型 [8107, 212]
      预定义的Trait类型 [2917, 38]
      Property属性 [1376, 22]
      Trait属性监听 [1467, 65]
      Event和Button属性 [581, 22]
      代理属性 [1265, 46]
      动态添加Trait属性 [501, 19]
    创建自己的Trait类型 [3013, 109]
      继承TraitType [1433, 49]
      使用Trait类创建新类型 [958, 21]
      TraitHandler类 [526, 39]
    TraitsUI入门 [9996, 178]
      缺省界面 [609, 9]
      用View定义界面 [8938, 169]
        外部视图和内部视图 [3773, 57]
        多模型视图 [975, 35]
        Group对象 [2914, 75]
        配置视图 [1165, 2]
    用Handler控制界面和模型 [4356, 109]
      用Handler处理事件 [2279, 66]
      Controller和UIInfo对象 [649, 16]
      响应Trait属性的事件 [747, 27]
    属性编辑器 [4928, 166]
      编辑器演示程序 [1215, 77]
      对象编辑器 [3236, 88]
    IPython Notebook中的控件 [185, 53]

  TVTK与Mayavi-数据的三维可视化 [37885, 999]
    VTK的流水线(Pipeline) [5124, 69]
      显示圆锥 [1949, 37]
      用ivtk观察流水线 [3081, 32]
        照相机 [629, 4]
        光源 [415, 7]
        实体 [1136, 4]
    数据集(Dataset) [6367, 136]
      ImageData [2546, 48]
      RectilinearGrid [687, 16]
      StructuredGrid [1345, 30]
      PolyData [1495, 42]
    TVTK的改进 [2344, 91]
      TVTK的基本用法 [1060, 0]
      Trait属性 [327, 7]
      序列化(Pickling) [156, 15]
      集合迭代 [130, 24]
      数组操作 [286, 15]
    TVTK可视化实例 [8932, 331]
      切面 [3260, 69]
      等值面 [1491, 31]
      流线 [2433, 61]
      计算圆柱的相贯线 [1487, 170]
    用mlab快速绘图 [11263, 186]
      点和线 [1365, 13]
      Mayavi的流水线 [1888, 22]
      二维图像的可视化 [2306, 39]
      网格面mesh [1621, 41]
      修改和控制流水线 [1212, 39]
      标量场 [1592, 12]
      矢量场 [932, 20]
    Mayavi和TVTK的关系 [1300, 37]
      显示TVTK流水线 [380, 16]
      两条流水线的关系 [766, 21]
    将TVTK和Mayavi嵌入到TraitsUI界面中 [1891, 146]
      TVTK场景的嵌入 [697, 48]
      Mayavi场景的嵌入 [1063, 98]

  OpenCV-图像处理和计算机视觉 [25245, 566]
    数据类型 [3759, 52]
      图像类型 [818, 8]
      类型转换 [2174, 26]
    图像处理 [4954, 43]
      二维卷积 [1521, 29]
      形态学运算 [1269, 1]
      填充-floodFill [1333, 13]
      去瑕疵-inpaint [726, 0]
    图像变换 [8225, 337]
      几何变换 [1374, 47]
      重映射-remap [1584, 71]
      直方图 [2570, 100]
        直方图反向映射 [1080, 32]
        直方图匹配 [496, 46]
      二维离散傅立叶变换 [1513, 47]
      用双目视觉图像计算深度信息 [1184, 72]
    图像识别 [7546, 114]
      用Hough变换检测直线和圆 [2877, 75]
      图像分割 [2017, 39]
        Mean-Shift法 [723, 13]
        分水岭算法 [1197, 26]
      SURF特征匹配 [2612, 0]
    形状与结构分析 [562, 18]

  Cython-编译Python程序 [26219, 1023]
    Cython入门 [5323, 106]
      计算矢量集的距离矩阵 [702, 57]
      将Cython程序编译成扩展模块 [883, 21]
      使用cdef关键字声明变量类型 [2889, 13]
      使用cdef定义C语言函数 [757, 15]
    高效处理数组 [3788, 217]
      提高绘图速度 [1116, 131]
    使用Python标准对象和API [2360, 85]
      操作`list`和`tuple`对象 [1112, 63]
      用`array.array`作动态数组 [1248, 22]
    扩展类型(cdef类) [5537, 341]
      扩展类型的基本结构 [994, 36]
      一维浮点数向量类型 [2072, 119]
      包装ahocorasick库 [2342, 186]
    Cython技巧集 [8161, 266]
      创建ufunc函数 [3139, 83]
      快速调用DLL中的函数 [1488, 63]
      调用BLAS函数 [3454, 120]
        包装`saxpy()`函数 [1093, 34]
        `dgemm()`高速矩阵乘积 [2191, 86]

  使用泊松混合合成图像 [3307, 63]
    泊松混合算法 [3176, 63]

  信号处理与数字滤波器 [0, 255]
    FDN混响 [0, 255]
      Cython Speedup [0, 187]

  推荐算法 [5409, 195]
    推荐性能评价标准 [476, 12]
    矩阵分解 [1155, 22]
    使用最小二乘法实现矩阵分解 [2246, 46]
    使用Cython迭代实现矩阵分解 [1101, 93]

  物理模拟 [1991, 194]
    悬链线 [1775, 109]
      使用运动方程模拟悬链线 [484, 43]
      通过能量最小值计算悬链线 [954, 44]
    最速降线 [216, 85]

  频域信号处理 [9479, 364]
    FFT知识复习 [1770, 30]
    合成时域信号 [820, 56]
    观察信号的频谱 [4693, 148]
      窗函数 [636, 35]
      频谱平均 [711, 27]
      谱图 [822, 12]
      精确测量信号频率 [892, 42]
    卷积运算 [2046, 130]
      快速卷积 [899, 36]
      卷积的分段运算 [950, 94]

  布尔可满足性问题求解器 [9085, 287]
    用Cython包装PicoSAT [2394, 110]
    数独游戏 [2314, 64]
    扫雷游戏 [2550, 105]
      识别雷区中的数字 [856, 35]
      用SAT扫雷 [1061, 69]
      自动扫雷 [376, 1]

  分形 [9366, 445]
    Mandelbrot集合 [2232, 103]
      纯Python实现 [451, 32]
      用Cython提速 [303, 10]
      连续的逃逸时间 [466, 19]
      Mandelbrot演示程序 [504, 42]
    迭代函数系统(IFS) [3415, 125]
      2D仿射变换 [865, 0]
      迭代函数系统设计器 [1169, 67]
    L-System分形 [1023, 104]
    分形山脉 [2494, 113]
      一维中点移位法 [979, 23]
      二维中点移位法 [571, 40]
      菱形方形算法 [833, 50]

阅读(381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~