Python金融大数据分析(第2版)_【德】伊夫·希尔皮斯科_AZW3_MOBI_EPUB_PDF_电子书(无页码)_【德】伊夫·希尔皮斯科
内容节选
第10章高性能的Python 不要降低预期去屈就性能,而要提升性能满足预期。 ——拉尔夫·马斯顿 有一种长期存在的偏见,认为Python本身是一种相对低效的编程语言,不适合用来处理金融业务的计算任务。除了Python是一种解释型语言之外,出现这种偏见的推理方式通常是:Python处理循环时很慢,金融算法的实现往往需要循环,因此,Python对于金融算法的实现来说太慢了。另一种推理方式是:其他(编译型)语言(如C或者C++)可以快速执行循环,金融算法常常需要循环,因此,这些(编译型)编程语言适合于金融业和金融算法。 必须承认,即便写出合适的Python代码,也有可能执行得很慢——可能对于许多应用领域太慢。本章介绍的是加速金融环境下常见典型任务及算法的方法。本章将介绍,如何明智地使用数据结构、选择合适的实现方法及范型,以及使用正确的高性能软件包。Python甚至可以与编译型编程语言匹敌,这是因为它本身也是编译后执行的。 为此,本章将介绍让代码加速的不同方法。 向量化 利用Python的向量化功能,是前几章已经广泛使用的方法。 动态编译 Numba软件包可以让我们使用LLVM技术来动态地编译纯Python代码。 静态编译 Cython不仅是一个Python软件包,还是一种组合了Python和C的混合语言。例如,它可以使用静态类型声明,静态编译经过调整的代码。 多进程 Python的multiprocessing模块可以简便地实现代码并行执行。 本章介绍如下内容。 循环 本节介绍Python循环及其加速方法。 算法 本节讲解的是常用作性能基准的标准数学算法,例如斐波那契数列的生成。 二叉树 二项式期权定价模型是广泛使用的金融模型,可作为更复杂金融算法的一个案例分析。 蒙特卡洛模拟 类似地,蒙特卡洛模拟在金融实践中广泛用于定价和风险管理。这种算法对计算的要求很高,长期被视为C或者C++语言的“领地”。 pandas递归算法 本节介绍基于金融时间序列数据的递归算法的加速。特别地,它还介绍了计算指数加权移动平均数(EWMA)的不同实现方法。 10.1 循环 本节解决Python的循环问题。任务相当简单:编写一个函数提取“大量”随机数,然后返回平均值。我们感兴趣的是执行时间,这可以用神奇的%time和%timeit函数估算。 10.1.1Python 让我们“慢慢”地开始——原谅我的双关语。在纯Python中,这样的函数可能像下面的average_py():In [1]: import randomIn [2]: def average_py(n): s = 0 ❶ for i in range(n): s += random.random() ❷ return s / n ❸ In [3]: n = 10000000 ❹ In [4]: %time average_py(n) ❺ CPU times: user 1.82 s, sys: 10.4 ms, total: 1.83 s Wall time: 1.93 s Out[4]: 0.5000590124747943 In [5]: %timeit average_py(n) ❻ 1.31 s ± 159 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) In [6]: %time sum([random.random() for _ in range(n)]) / n ❼ CPU times: user 1.55 s, sys: 188 ms, total: 1.74 s Wall time: 1.74 s Out[6]: 0.49987031710661173 ❶ 初始化变量s的值。 ❷ 在s中添加区间(0,1)的均匀分布随机值。 ❸ 返回平均值。 ❹ 定义循环次数。 ❺ 测定函数执行一次的时间。 ❻ 多次测定函数执行时间,得到更可靠的估算。 ❼ 使用列表推导代替函数。 这为以后的其他方法设置了基准。 10.1.2 NumPyNumPy也可以使用专用的数学库,如Intel数学核心库。——原注 NumPy的优势在于其向量化能力。从形式上看,Python级别的循环消失了;循环在更深的一级上,由NumPy提供的优化和预编译例程执行 。average_np()函数利用了这种方法:In [7]: import numpy as npIn [8]: def average_np(n): s = np.random.random(n) ❶ return s.mean() ❷ In [9]: %time average_np(n) CPU times: user 180 ms, sys: 43.2 ms, total: 223 ms Wall......
- 信息
- 内容提要
- O’Reilly Media, Inc.介绍
- 前言
- 资源与支持
- 第1部分 Python与金融
- 第1章 为什么将Python用于金融
- 第2章 Python基础架构
- 第2部分 掌握基础知识
- 第3章 数据类型与结构
- 第4章 用NumPy进行数值计算
- 第5章 pandas数据分析
- 第6章 面向对象编程
- 第3部分 金融数据科学
- 第7章 数据可视化
- 第8章 金融时间序列
- 第9章 输入/输出操作
- 第10章 高性能的Python
- 第11章 数学工具
- 第12章 推断统计学
- 第13章 统计学
- 第4部分 算法交易
- 第14章 FXCM交易平台
- 第15章 交易策略
- 第16章 自动化交易
- 第5部分 衍生品分析
- 第17章 估值框架
- 第18章 金融模型的模拟
- 第19章 衍生品估值
- 第20章 投资组合估值
- 第21章 基于市场的估值
- 作者介绍
- 封面说明
- 附录A 日期与时间
- 附录B BSM期权类