楼主: ookiddy
2757 4

[源码分享] 【量化实验室q.datayes.com】量化分析师的Python日记【第3天:numpy篇】 [推广有奖]

  • 0关注
  • 3粉丝

高中生

62%

还不是VIP/贵宾

-

威望
0
论坛币
847 个
通用积分
0
学术水平
9 点
热心指数
9 点
信用等级
9 点
经验
2426 点
帖子
17
精华
0
在线时间
23 小时
注册时间
2006-8-24
最后登录
2022-12-20

楼主
ookiddy 发表于 2015-5-7 17:16:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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



二维码

扫码加我 拉你入群

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

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

关键词:python Numpy Data 量化分析 分析师 实验室 分析师 日记

已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 64 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 64  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

沙发
ydb8848 发表于 2015-5-7 17:34:18
多谢分享。。。

藤椅
hkmonte 发表于 2015-5-7 23:30:16
谢谢分享!

板凳
lee_d_x 发表于 2015-7-8 16:25:45
谢谢分享!

报纸
羅先森 发表于 2017-3-8 18:34:25
谢谢分享了!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-27 06:17