Numpy 调用C语言函数

我们可以在Cython中调用C语言函数。作为示例,在本章中我们将调用C语言的log函数。该函数只能对单个数字进行操作,而NumPy中的log函数还可以对数组进行操作。我们将计算股价的对数收益率。

具体步骤

从编写Cython代码开始。

  1. 编写.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文件稍作修改即可。

  1. 绘制对数收益率。

用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股票的对数收益率图示如下:
调用C语言函数

攻略小结

我们在Cython代码中,调用了C语言的log函数。该函数和NumPy中的函数一起用来计算股票的对数收益率。通过这种方式,我们可以创建自己专用的包含便捷函数的API。在Cython中调用C语言函数的好处是,代码的执行速度应该和C语言代码差不多,而代码总体来看还是Python代码。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程