我们可以在Cython中调用C语言函数。作为示例,在本章中我们将调用C语言的log
函数。该函数只能对单个数字进行操作,而NumPy中的log
函数还可以对数组进行操作。我们将计算股价的对数收益率。
具体步骤
从编写Cython代码开始。
- 编写.pyx文件。
首先需要从libc命名空间引入C语言的log
函数。然后通过使用for
循环,把该函数应用于数组的各个元素。最后使用NumPy中的diff
函数,计算取对数后所得结果的一阶差分。
from libc.math cimport log
import numpy
def logrets(numbers):
logs = [log(x) for x in numbers]
return numpy.diff(logs)
在前面的攻略中,我们已经介绍了Cython模块的构建过程。我们只需要对setup.py文件稍作修改即可。
- 绘制对数收益率。
用Matplotlib下载股价数据,把刚刚生成的Cython模块中的logrets
函数应用于收盘价数据并绘制出结果。
from matplotlib.finance import quotes_historical_yahoo
from datetime import date
import numpy
import sys
from log_returns import logrets
import matplotlib.pyplot
today = date.today()
start = (today.year - 1, today.month, today.day)
quotes = quotes_historical_yahoo(sys.argv[1], start, today)
close = numpy.array([q[4] for q in quotes])
matplotlib.pyplot.plot(logrets(close))
matplotlib.pyplot.show()
AAPL股票的对数收益率图示如下:
攻略小结
我们在Cython代码中,调用了C语言的log
函数。该函数和NumPy中的函数一起用来计算股票的对数收益率。通过这种方式,我们可以创建自己专用的包含便捷函数的API。在Cython中调用C语言函数的好处是,代码的执行速度应该和C语言代码差不多,而代码总体来看还是Python代码。