参考内容:
菜鸟教程 https://www.runoob.com/numpy/numpy-tutorial.html
清华计算机博士带你学-Python金融量化分析 https://www.bilibili.com/video/BV1i741147LS?t
1. 介绍与安装
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
安装 NumPy 最简单的方法就是使用pip工具:
pip install numpy
引用方法:
import numpy as np
Linux 下安装
Ubuntu & Debian
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
CentOS/Fedora
sudo dnf install numpy scipy python-matplotlib ipython python-pandas sympy python-nose atlas-devel
Mac 系统
Mac 系统的 Homebrew 不包含 NumPy 或其他一些科学计算包,所以可以使用以下方式来安装:
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 数据类型
布尔型 | bool_ |
整型 | int_ int8 int16 int32 int64 |
无符号整型 | uint8 uint16 uint32 uint64 |
浮点型 | float_ float16 float32 float64 |
复数型 | complex_ complex64 complex128 |
3. 常用属性
属性 | 说明 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
4. array创建
方法 | 描述 |
---|---|
array() | 将列表转换为数组,可选择显示指定dtype |
arange() | range的numpy版,支持浮点数 |
linspace() | 类似arange(),第三个参数为数组长度 |
zeros() | 根据指定形状和dtype创建全0数组 |
ones() | 根据指定形状和dtype创建全1数组 |
empty() | 根据指定形状和dtype创建全空数组(随机值,内存空间决定) |
eye() | 根据指定边长和dtype创建单位矩阵 |
array()
a = np.array([[1,2,3],[4,5,6]])
print(a)
或者
a = [[1,2,3],[4,5,6]]
a = np.array(a)
print(a)
输出:
[[1 2 3]
[4 5 6]]
arange()和linspace()
a = np.arange(0,99,2.5) #第三个参数表示步长
b = np.linspace(0,99,100,dtype=int) #第三个参数表示数组长度
print(a)
print(b)
输出:
[ 0. 2.5 5. 7.5 10. 12.5 15. 17.5 20. 22.5 25. 27.5 30. 32.5
35. 37.5 40. 42.5 45. 47.5 50. 52.5 55. 57.5 60. 62.5 65. 67.5
70. 72.5 75. 77.5 80. 82.5 85. 87.5 90. 92.5 95. 97.5]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
96 97 98 99]
zeros()、ones()和empty()
a=np.zeros(10,dtype=int)
print(a)
print(a.dtype)
a=np.ones(10,dtype=int)
print(a)
print(a.dtype)
a=np.empty(10)
print(a)
print(a.dtype)
输出:
[0 0 0 0 0 0 0 0 0 0]
int32
[1 1 1 1 1 1 1 1 1 1]
int32
[7.8e-322 0.0e+000 0.0e+000 0.0e+000 0.0e+000 0.0e+000 0.0e+000 0.0e+000
0.0e+000 0.0e+000]
float64
5. ndarray批量运算
数组和标量之间的运算
- a+1 a*3 1//a a**0.5 a>5
同样大小数组之间的运算
- a+b a/B a%b a==b
a = np.arange(0,9)
b = np.arange(10,19)
print(a+1)
print(a+b)
print(a>b)
输出:
[1 2 3 4 5 6 7 8 9]
[10 12 14 16 18 20 22 24 26]
[False False False False False False False False False]
matplotlib画图,以a**2为例
x = np.linspace(-10,10,1000)
y = x**2
plt.plot(x,y)
plt.show()
6. 索引和切片
切片
包头不包尾
#切片
a = np.arange(15)
print(a)
print(a[2:7])
输出:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
[2 3 4 5 6]
二维数组切片
把第一行第二行的前两个数据切出来
a[0:2,0:2],切片语句中的逗号前面的按行切,逗号后面的按列切。
a = np.arange(15).reshape(3,5)
print(a)
print(a[0:2,0:2])
输出:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[0 1]
[5 6]]
使用 a[0:2][0:2]是错误的,这个表示的是按行切[0:2]之后,再按行切[0:2]。相当于
b = a[0:2]
c = b[0:2]
输出结果是
[[0 1 2 3 4]
[5 6 7 8 9]]
布尔型索引
找出array中所有大于50的元素
a = [random.randint(0,100) for i in range(20)]
a = np.array(a)
print(a)
print(a>50)
a = a[a>50]
print(a)
输出结果
[ 69 100 10 71 83 29 55 20 30 16 50 4 57 45 25 45 9 51
7 98]
[ True True False True True False True False False False False False
True False False False False True False True]
[ 69 100 71 83 55 57 51 98]
花式索引
切出第1、3、5项。
a=[random.randint(0,10)for i in range(20)]
print(a)
a = np.array(a)
a = a[[1,3,5]]
print(a)
输出
[2, 0, 10, 8, 9, 10, 8, 4, 2, 2, 3, 9, 6, 5, 5, 8, 7, 5, 1, 5]
[ 0 8 10]
二维数组花式索引
切出第1行中的第1、3项和第3行中的1、3项元素
a = np.arange(20)
a.shape = (4,5)
print(a)
a = a[[1,3],:]
print(a)
a = a[:,[1,3]]
print(a)
输出结果
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
[[ 5 6 7 8 9]
[15 16 17 18 19]]
[[ 6 8]
[16 18]]
7. 通用函数
能够同时对数组中的所有元素进行运算的函数
- 一元函数:abs,sqrt,exp,log,ceil,floor,rint,trunc,modf,isnan,isinf,cos,sin,tan
- 二元函数:add,substract,multiply,divide,power,mod,maximum,mininum