全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
2733 4
2015-05-07
q.datayes.com

接下来要给大家介绍的系列中包含了Python在量化金融中运用最广泛的几个Library:

numpy

scipy

pandas

matplotlib

会给初学者一一介绍

NumPy 简介

一、NumPy是什么?

量化分析的工作涉及到大量的数值运算,一个高效方便的科学计算工具是必不可少的。Python语言一开始并不是设计为科学计算使用的语言,随着越来越多的人发现Python的易用性,逐渐出现了关于Python的大量外部扩展,NumPy (NumericPython)就是其中之一。NumPy提供了大量的数值编程工具,可以方便地处理向量、矩阵等运算,极大地便利了人们在科学计算方面的工作。另一方面,Python是免费,相比于花费高额的费用使用Matlab,NumPy的出现使Python得到了更多人的青睐。

我们可以简单看一下如何开始使用NumPy:

1

import numpy


2

numpy.version.full_version


'1.8.0'

我们使用了"import"命令导入了NumPy,并使用numpy.version.full_version查出了量化实验室里使用的NumPy版本为1.8.0。在往后的介绍中,我们将大量使用NumPy中的函数,每次都添加numpy在函数前作为前缀比较费劲,在之前的介绍中,我们提及了引入外部扩展模块时的小技巧,可以使用"from numpyimport *"解决这一问题。

那么问题解决了?慢!Python的外部扩展成千上万,在使用中很可能会import好几个外部扩展模块,如果某个模块包含的属性和方法与另一个模块同名,就必须使用import module来避免名字的冲突。即所谓的名字空间(namespace)混淆了,所以这前缀最好还是带上。

那有没有简单的办法呢?有的,我们可以在import扩展模块时添加模块在程序中的别名,调用时就不必写成全名了,例如,我们使用"np"作为别名并调用version.full_version函数:

1

import numpy as np


2

np.version.full_version


'1.8.0'

二、初窥NumPy对象:数组

NumPy中的基本对象是同类型的多维数组(homogeneous multidimensional array),这和C++中的数组是一致的,例如字符型和数值型就不可共存于同一个数组中。先上例子:

1

a = np.arange(20)


这里我们生成了一个一维数组a,从0开始,步长为1,长度为20。Python中的计数是从0开始的,R和Matlab的使用者需要小心。可以使用print查看:

1

print a


[ 0  1 2  3  4 5  6  7 8  9 10 11 12 13 14 15 16 17 1819]

我们可以通过"type"函数查看a的类型,这里显示a是一个array:

1

type(a)


numpy.ndarray

通过函数"reshape",我们可以重新构造一下这个数组,例如,我们可以构造一个4*5的二维数组,其中"reshape"的参数表示各维度的大小,且按各维顺序排列(两维时就是按行排列,这和R中按列是不同的):

1

a = a.reshape(4, 5)


2

print a


[[ 0  1 2  3  4]

[ 5 6  7  8  9]

[10 11 12 13 14]

[15 16 17 18 19]]

构造更高维的也没问题:

1

a = a.reshape(2, 2, 5)


2

print a


[[[ 0  1 2  3  4]

  [ 5 6  7  8  9]]

[[10 11 12 13 14]

  [15 16 17 18 19]]]

既然a是array,我们还可以调用array的函数进一步查看a的相关属性:"ndim"查看维度;"shape"查看各维度的大小;"size"查看全部的元素个数,等于各维度大小的乘积;"dtype"可查看元素类型;"dsize"查看元素占位(bytes)大小。

1

a.ndim


3

1

a.shape


(2, 2, 5)

1

a.size


20

1

a.dtype


dtype('int64')

三、创建数组

数组的创建可通过转换列表实现,高维数组可通过转换嵌套列表实现:

1

raw = [0,1,2,3,4]


2

a = np.array(raw)


3

a


array([0, 1, 2, 3,4])

1

raw = [[0,1,2,3,4], [5,6,7,8,9]]


2

b = np.array(raw)


3

b


array([[0, 1, 2,3, 4],

       [5, 6, 7, 8, 9]])

一些特殊的数组有特别定制的命令生成,如4*5的全零矩阵:

1

d = (4, 5)


2

np.zeros(d)


array([[ 0.,  0., 0.,  0.,  0.],

       [ 0., 0.,  0.,  0., 0.],

       [ 0., 0.,  0.,  0., 0.],

       [ 0., 0.,  0.,  0., 0.]])

默认生成的类型是浮点型,可以通过指定类型改为整型:

1

d = (4, 5)


2

np.ones(d, dtype=int)


array([[1, 1, 1,1, 1],

       [1, 1, 1, 1, 1],

       [1, 1, 1, 1, 1],

       [1, 1, 1, 1, 1]])

[0, 1)区间的随机数数组:

1

np.random.rand(5)


array([0.93807818,  0.45307847,  0.90732828, 0.36099623,  0.71981451])


由于论坛篇幅限制,全文请访问 q.datayes.com



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-5-7 17:34:18
多谢分享。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-5-7 23:30:16
谢谢分享!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-8 16:25:45
谢谢分享!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-8 18:34:25
谢谢分享了!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群