一、Numpy是什么?
1.Numrical Python,数值的Python,应用于数值分析领域的Python语言工具;
2.Numpy是一个开源的科学计算库;
3.Numpy弥补了作为通用编程语言的Python在数值计算方面,能力弱,速度慢的不足;
4.Numpy拥有丰富的数学函数、强大的多维数组和优异的运算性能;
5.Numpy与Scipy、scikit、matplotlib等其它科学计算库可以很好地协调工作;
6.Numpy可以取代matlab等工具,允许用户进行快速开发的同时完成交互式的原型设计。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/vector.py
二、多维数组
1.numpy.ndarray
numpy中的多维数组是numpy.ndarray类类型的对象,可用于表示数据结构中的任意维度的数组;
2.创建多维数组对象
numpy.arange(起始, 终止, 步长)->一维数组,首元素就是起始值,尾元素为终止值之前的最后一个元素,步长即每次递增的公差。缺省起始值为0,缺省步长为1。
numpy.array(任何可被解释为数组的容器)
3.内存连续,元素同质。
4.ndarray.dtype属性
表示元素的数据类型。通过dtype参数和astype()方法可以指定和修改元素的数据类型。
5.ndarray.shape属性
表示数组的维度:(高维度数, ..., 低维度数)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/array.py
6.元素索引,从0开始
数组[索引]
数组[行索引][列索引]
数组[页索引][行索引][列索引]
数组[页索引, 行索引, 列索引]
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/index.py
7.numpy的内置类型和自定义类型
1)numpy的内置类型
bool_ 1字节布尔型,True(1)/False(0)
int8 1字节有符号整型,-128 - 127
int16 2字节有符号整型
int32 4字节有符号整型
int64 8字节有符号整型
uint8 1字节无符号整型,0 - 255
uint16 2字节无符号整型
uint32 4字节无符号整型
uint64 8字节无符号整型
float16 2字节浮点型
float32 4字节浮点型
float64 8字节浮点型
complex64 8字节复数型
complex128 16字节复数型
str_ 字符串型
2)自定义类型
通过dtype将多个相同或者不同的numpy内置类型组合成某种复合类型,用于数组元素的数据类型。除了使用内置类型的全称以外还可以通过类型编码字符串简化类型的说明。
numpy.int8 -> i1
numpy.int16 -> i2
numpy.uint32 -> u4
numpy.float64 -> f8
numpy.complex128 -> c16
对于多字节整数可以加上字节序前缀:
= - 处理器系统默认; | < - 小端字节序,低数位低地址; | > - 大端字节序,低数位高地址。 |
98 0x1234 | L H 0x34 0x12 | L H 0x12 0x34 |
numpy.str_ -> U字符数
numpy.bool_ -> b
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/dtype.py
8.切片
数组[起始:终止:步长, 起始:终止:步长, ...]
缺省起始:首(步长为正)、尾(步长为负)
缺省终止:尾后(步长为正)、首前(步长为负)
缺省步长:1
靠近端部的一个或几个连续的维度使用缺省切片,可以用"..."表示。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/slice.py
9.改变维度
1)视图变维:针对一个数组对象获取其不同维度的视图
数组.reshape(新维度)->数组的新维度视图
数组.ravel()->数组的一维视图
2)复制变维:针对一个数组对象获取其不同维度的副本
数组.flatten()->数组的一维副本
3)就地变维
数组.shape = (新维度)
数组.resize(新维度)
4)视图转置
数组.transpose()->数组的转置视图
数组.T: 转置视图属性
至少二维数组才能转置。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/reshape.py
10.组合与拆分
1)垂直组合/拆分
numpy.vstack((上, 下))
numpy.vsplit(数组, 份数)->子数组集合
2)水平组合/拆分
numpy.hstack((左, 右))
numpy.hsplit(数组, 份数)->子数组集合
3)深度组合/拆分
numpy.dstack((前, 后))
numpy.dsplit(数组, 份数)->子数组集合
4)行/列组合
numpy.row_stack((上, 下))
numpy.column_stack((左, 右))
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/stack.py
11.ndarray类的属性
dtype - 元素类型
shape - 数组维度
T - 转置视图
ndim - 维数
size - 元素数, 仅对一维数组等价于len()
itemsize - 元素字节数
nbytes - 总字节数 = size x itemsize
flat - 扁平迭代器
real - 实部数组
imag - 虚部数组
数组.tolist()->列表对象
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/attr.py
三、数据可视化:matplotlib.pyplot (mp)
1.基本绘图函数
mp.plot(水平坐标数组, 垂直坐标数组)
x: [1 2 3 4]
y: [5 6 7 8]
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt1.py
mp.plot(..., linestyle=线型, linewidth=线宽,color=颜色)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt2.py
mp.xlim(左边界, 右边界)
mp.ylim(底边界, 顶边界)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt3.py
mp.xticks(刻度位置数组, 刻度文本数组)
mp.yticks(刻度位置数组, 刻度文本数组)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt4.py
ax = mp.gca() # 获取当前坐标轴
ax.spines['left'].set_position(('data', 0))
ax.spines['left'].set_color(颜色)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt5.py
mp.plot(..., label=图例文本)
mp.legend(loc='upper left')
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt6.py
mp.scatter(水平坐标数组, 垂直坐标数组,marker=点型, s=大小, edgecolor=勾边色,facecolor=填充色, zorder=Z序)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt7.py
mp.annotate(备注文本,xy=目标位置,xycoords=目标坐标系,xytext=文本位置,textcoords=文本坐标系,fontsize=字体大小,arrowprops=箭头属性)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/plt8.py
2.图形对象
mp.figure(图形对象名, figsize=窗口大小,dpi=分辨率, facecolor=颜色)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/fig.py
3.子图
1)缺省布局
mp.subplot(行数, 列数, 图号)
mp.subplot(2, 3, 1)
mp.subplot(231)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sub1.py
2)栅格布局
import matplotlib.gridspec as mg
gs = mg.GridSpec(行数, 列数) # 栅格布局器
mp.subplot(gs[行, 列])
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sub2.py
3)自由布局
mp.axes([左下角水平坐标, 左下角垂直坐标, 宽度, 高度])
其中所有的尺寸参数都是相对比例。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sub3.py
4.坐标刻度定位器
定位器对象 = mp.xxxLocator(...)
ax = mp.gca()
ax.xaxis.set_major_locator(定位器对象) # 主刻度
ax.xaxis.set_minor_locator(定位器对象) # 次刻度
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/tick.py
5.散点图
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/scatter.py
6.区域填充
mp.fill_between(水平坐标数组, 垂直坐标起点数组,
垂直坐标终点数组, 条件, color=颜色,
alpha=透明度)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/fill.py
7.柱状图
mp.bar(水平坐标数组, 高度数组, ec=边缘颜色,
fc=填充颜色, label=标签文本,
alpha=透明度)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/bar.py
8.等高线图
mp.contour(x, y, z, 线数, colors=颜色,
linewidths=线宽)
mp.contourf(x, y, z, 线数, cmap=颜色映射)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/cntr.py
9.热像图
mp.imshow(矩阵, cmap=颜色映射,origin=垂直轴方向)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/hot.py
10.饼图
mp.pie(值列表, 间隙列表, 标签, 颜色列表, 格式串,shadow=是否带阴影, startangle=起始角度)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/pie.py
11.三维曲面
from mpl_toolkits.mplot3d import axes3d
ax = mp.gca(projection='3d')
ax.plot_surface(x, y, z, rstride=行距,cstride=列距, cmap=颜色映射)
ax.plot_wireframe(x, y, z, rstride=行距,cstride=列距, linewidth=线宽, color=颜色)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/wf.py
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sf.py
12.三维散点
ax.scatter(x, y, z, s=大小, c=颜色, marker=点型)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/s3.py
13.极坐标系
mp.gca(projection='polar')
mp.plot ...
mp.scatter ...
x, y
| |
v v
极角 极径
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/polar.py
14.半对数坐标
mp.semilogy(...)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/log.py
15.简单动画
import matplotlib.animation as ma
def 更新函数 (顺序号):
更新画面帧
ma.FuncAnimation(图形对象, 更新函数,interval=间隔时间(毫秒))
--------------------------------------------
def 更新函数 (生成值):
更新画面帧
def 生成器():
for ...:
产生新的数据
yield 生成值
ma.FuncAnimation(图形对象, 更新函数,生成器, interval=间隔时间(毫秒))
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/bub.py
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sig.py
position size growth color
float float float float float float float float
0
1
2
.
.
.99
四、numpy的通用函数
1.读取文本文件
numpy.loadtxt(文件名,delimiter=分隔符,usecols=选择列,unpack=是否解包,dtype=目标类型,converters=转换器)
-> 二维数组(unpack=False)/列一维数组集(unpack=True)
2.保存文本文件
numpy.savetxt(文件名,二维数组,delimiter=分隔符,fmt=格式)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/txt.py
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/k.py
3.算数平均值
样本:S = [s1, s2, ..., sn]
算数平均值:m = (s1+s2+...+sn)/n
numpy.mean(样本数组)->算数平均值
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/mean.py
4.加权平均值
样本:S = [s1, s2, ..., sn]
权重:W=[w1,w2,...,wn]
加权平均值:
a = (s1w1+s2w2+...+snwn)/(w1+w2+...+wn)
numpy.average(样本数组, weights=权重数组)
->加权平均值
成交量加权平均价格(VWAP)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/vwap.py
时间加权平均价格(TWAP)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/twap.py
5.最大值和最小值
1)max/min
获取一个数组中的最大/最小元素
a:
9 7 5
3 1 8
6 6 1
numpy.max(a)->9
numpy.min(a)->1
2)maximum/minimum
在两个数组的对应元素之间构造最大值/最小值数组
b:
6 1 9
7 1 7
4 4 5
numpy.maximum(a, b)->
9 7 9
7 1 8
6 6 5
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/max.py
价格波动范围=最高的最高价-最低的最低价
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/range.py
3)ptp:极差
极差,一个数组最大值和最小值之差
numpy.ptp(数组)->数组.max()-数组.min()
价格波动幅度=某一种价格的极差
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/spread.py
6.中位数
将多个样本按照大小顺序排列,居于中间位置的元素即为中位数。
12 23 45 67 89
^
12 23 45 67
\___/
34
^
A: 样本集
L: 样本数
M = (A[(L-1)/2]+A[L/2])/2
numpy.median(数组)->中位数
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/med.py
7.标准差
样本:S = [s1, s2, ..., sn]
均值:m = (s1+s2+...+sn)/n
离差:D = [s1-m, s2-m, ..., sn-m]
方差:v = ((s1-m)^2+(s2-m)^2+...(sn-m)^2)/n
标准差:std = sqrt(v) (方均根离差)
numpy.std(数组, ddof=非自由度)->标准差
总体方差和总体标准差:.../n
样本方差和样本标准差:.../(n-1)
10
50
25 25
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/var.py
8.针对日期的处理
1)星期数据
数组[关系表达式]:关系表达式的值是一个布尔型数组,其中为True的元素对应于数组中满足关系表达式的元素,
以上下标运算的值就是从数组中拣选与布尔数组中为True的元素相对应的元素。
np.where(关系表达式)->数组中满足关系表达式的元素的下标数组。
np.take(数组,下标数组)->数组中由下标数组所标识的元素集合。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/week.py
2)星期汇总
np.apply_along_axis(函数, 轴向, 高维数组)
在高维数组中,沿着指定轴向,提起低维子数组,作为参数传递给特定的函数,并将其返回值按照同样的轴向组成成新的数组返回给调用者。
轴向:
二维,0-行方向,1-列方向
三维,0-页方向,1-行方向,2-列方向
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/axis.py
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sum.py
9.一维卷积
a: [1 2 3 4 5] - 被卷积数组
b: [6 7 8] - 卷积核数组
c = a (x) b = [6 19 40 61 82 67 40] - full
[19 40 61 82 67] - same
[40 61 82] - valid
6 19 40 61 82 67 40
0 0 1 2 3 4 5 0 0
8 7 6
8 7 6
8 7 6
8 7 6
8 7 6
8 7 6
8 7 6
numpy.convolve(a, b, 'full'/'same'/'valid')
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/conv.py
1)移动均线
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/ma.py
[a b c d e] [A B C D E]
(aA+bB+cC+dD+eE)/(A+B+C+D+E)
(aA+bB+cC+dD+eE)/S
aA/S+bB/S+cC/S+dD/S+eE/S
[A/S B/S C/S D/S E/S]
2)布林带
中轨:移动均线
上轨:中轨 + 2x标准差
下轨:中轨 - 2x标准差
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/bb.py
10.线性模型
1 2 3 4
60 70 80 90
y = kx+b
1)线性预测
a b c d e f ? ?
d = aA+bB+cC \
e = bA+cB+dC > A B C
f = cA+dB+eC /
? = dA+eB+fC
/ a b c\ / A \ / d \
| b c d | X | B | = | e |
\ c d e / \ C / \ f /
--------- ----- -----
a x b
= numpy.linalg.lstsq(a, b)
bx=>?
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/line.py
2)线性拟合
kx + b = y
kx1 + b = y1
kx2 + b = y2
...
kxn +b = yn
/ x1 1 \ / k \ / y1 \
| x2 1 | X | b | = | y2 |
| ... | \ / | ... |
\ xn 1 / \ yn /
-------- ---- ------
a x b
= np.linalg.lstsq(a, b)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/trend.py
11.裁剪、压缩和累乘
1)ndarray.clip(min=最小值, max=最大值)
将调用数组中小于min的元素设置为min,大于max的元素设置为max。
2)ndarray.compress(条件)
返回调用数组中满足给定条件的元素。
3)ndarray.prod()
返回调用数组中各元素的乘积。
ndarray.cumprod()
返回调用数组中各元素计算累乘的过程数组。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/ndarr.py
12.相关性
样本:
a = [a1, a2, ..., an]
b = [b1, b2, ..., bn]
均值:
ave(a) = (a1+a2+...+an)/n
ave(b) = (b1+b2+...+bn)/n
离差:
dev(a) = [a1, a2, ..., an] - ave(a)
dev(b) = [b1, b2, ..., bn] - ave(b)
方差:
var(a) = ave(dev(a)dev(a))
var(b) = ave(dev(b)dev(b))
标准差:
std(a) = sqrt(var(a))
std(b) = sqrt(var(b))
协方差:
cov(a,b) = ave(dev(a)dev(b))
cov(b,a) = ave(dev(b)dev(a))
相关性系数:
cov(a,b)/std(a)std(b)
cov(b,a)/std(b)std(a)
[-1, 1]:正负表示了相关性方向为正或反,绝对值表示相关性强弱,越大越强,越小越弱,0表示不相关。
相关性矩阵:
/ var(a)/std(a)std(a)=1 cov(a,b)/std(a)std(b) \
| |
\ cov(b,a)/std(b)std(a) var(b)/std(b)std(b)=1 /
numpy.corrcoef(a, b)->相关性矩阵
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/corr.py
13.多项式拟合
用一个无穷级数表示一个可微函数。实际上任何可微的函数,总可以用一个N次多项式函数来近似,而比N次幂更高阶的部分可以作为无穷小量而被忽略不计。
f(x) = p0x^n + p1x^n-1 + p2x^n-2 + ... + pn
y0 = f(x0)
y1 = f(x1)
y2 = f(x2)
...
yn = f(xn)
numpy.ployfit(自变量数组, 函数值数组, 最高次幂(n))
->[p0, p1, ..., pn]
numpy.polyval([p0, p1, ..., pn], 自变量数组)->函数值数组
numpy.roots([p0, p1, ..., pn])->多项式方程的根
y = 3x^2+4x+1
y' = 6x+4
y''= 6
numpy.polyder([p0, p1, ..., pn])->导函数系数数组
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/poly.py
14.符号数组
a: [10 -20 30 0 40 -50 -60 0 70]
numpy.sign(a)->[1 -1 1 0 1 -1 -1 0 1]
净额成交量(OBV)
numpy.piecewise(被判断数组, [条件1, 条件2, ...],[标志1, 标志2, ...])->满足每个条件的标志数组
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/obv.py
15.矢量化
def 标量函数(标量参数1, 标量参数2, ...):
...
return 标量返回值1, 标量返回值2, ...
np.vectorize(标量函数)->矢量函数
矢量函数(矢量参数1, 矢量参数2, ...)
->矢量返回值1, 矢量返回值2, ...
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/vec.py
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sim.py
16.数据平滑与特征值
卷积降噪->曲线拟合->特征值
消除随机 获得数学 反映业务
噪声的干 模型 特征
扰
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/smr.py
y = f(x) -> y1 = f(x1)
y = g(x) -> y1 = g(x1)
f(x1) = g(x1)
f(x1)-g(x1)=0
f(x)-g(x)=0的根就是x1
np.polysub(p1, p2)->p3
np.roots(p3)->x1
五、矩阵和ufunc
1.矩阵
ndarray->matrix
numpy.matrix(可被解释为矩阵的二维容器,copy=[True]/False)->矩阵对象
1 2 3
4 5 6
'1 2 3; 4 5 6'
numpy.mat(可被解释为矩阵的二维容器)
数据共享,相当于copy=False的matrix()
numpy.bmat('A B; C D')
A: 1 2
3 4
B: 5 6
7 8
C: 9 10
11 12
D: 13 14
15 16
1 2 5 6
3 4 7 8
9 10 13 14
11 12 15 16
T - 转置
I - 逆
A x B = E 1 0 0
0 1 0
0 0 1
B = A.I
a = np.array([
[1, 2],
[3, 4]])
b = np.array([
[5, 6],
[7, 8]])
c = a * b
5 12
21 32
a = np.mat([
[1, 2],
[3, 4]])
b = np.mat([
[5, 6],
[7, 8]])
c = a * b
19 22
43 50
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/mat.py
A D
B E
C F
a b c m n
d e f o p
m = aA+bB+cC
n = aD+bE+cF
o = dA+eB+fC
p = dD+eE+fF
a b c
d e f
A D m n o
B E p q r
C F s t u
m = Aa+Dd
n = Ab+De
...
2.ufunc, 统一(泛)化函数
1)numpy.frompyfunc
numpy.frompyfunc(标量函数, 参数个数, 返回值个数)
->numpy.ufunc类型的函数对象
ufunc函数对象(矢量参数, ...)->矢量返回值, ...
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/vec2.py
2)numpy.add
reduce - 累加
accumulate - 累加过程
reduceat - 在指定位置累加
outer - 外和
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/add.py
3)除法
A.真除
[5 5 -5 -5]<真除>[2 -2 2 -2]=[2.5 -2.5 -2.5 2.5]
numpy.true_divide()
numpy.divide()
/
B.地板除
[5 5 -5 -5]<地板除>[2 -2 2 -2]=[2 -3 -3 2]
numpy.floor_divide()
//
C.天花板除
[5 5 -5 -5]<天花板除>[2 -2 2 -2]=[3 -2 -2 3]
D.截断除
[5 5 -5 -5]<截断除>[2 -2 2 -2]=[2 -2 -2 2]
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/div.py
4)余数
被除数<除以>除数=商...余数
除数x商+余数=被除数
地板余数:做地板除所得到的余数
[5 5 -5 -5]<地板除>[2 -2 2 -2]=[2 -3 -3 2]...[1 -1 1 -1]
numpy.remainder()
numpy.mod()
%
截断余数:做截断除所得到的余数
[5 5 -5 -5]<截断除>[2 -2 2 -2]=[2 -2 -2 2]...[1 1 -1 -1]
numpy.fmod()
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/mod.py
5)python中几乎所有的算术和关系运算符都被numpy借助ufunc实现为可对数组操作的矢量化运算符。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/fibo.py
1 1 1 1 1 1
1 0 1 0 1 0
1 1 2 1 3 2 5 3
1 0 1 1 2 1 3 2 ...
f1f2 f3 f4 f5 fn
F^2 3 4 n-1
6)numpy中的三角函数都是ufunc对象,可以对参数数组中的每个元素进行三角函数运算,并将运算结果以数组形式返回。
x = Asin(at+pi/2)
y = Bsin(bt)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/lissa.py
4 sin((2k-1)t)
--- x --------------
pi 2k-1
k=1,2,3
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/squr.py
7)实现位运算的ufunc
A.异或:^/__xor__/bitwise_xor
1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0
0 ^ 1 = 1
if a^b < 0 then a和b异号
B.与:&/__and__/bitwise_and
1 & 0 = 0
1 & 1 = 1
0 & 0 = 0
0 & 1 = 0
1 2^0 00000001 -1 -> 00000000
2 2^1 00000010 -1 -> 00000001
4 2^2 00000100 -1 -> 00000011
8 2^3 00001000 -1 -> 00000111
16 2^4 00010000 -1 -> 00001111
\___&___/
|
0
if a & (a-1) == 0 then a是2的幂
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/bit.py
C.移位:<</__lshift__/left_shift (乘2)
>>/__rshift__/right_shift (除2)
六、Numpy的子模块
1.线性代数模块(linalg)
1)矩阵的逆:inv()
在线性代数中,矩阵A与其逆矩阵A^-1的乘积是一个单位矩阵I。
使用numpy.linalg.inv()函数求矩阵的逆矩阵,要求必须是方阵,即行列数相等的矩阵。
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/inv.py
2)解线性(一次)方程组:solve()
/ x-2y+z=0
| 2y-8z-8=0
\ -4x+5y+9z+9=0
x-7z-8=0
5x-10y+5z=0
-8x+10y+18z+18=0
-3x+23z+18=0
3x-21z-24=0
2z-6=0 -> z = 3
x = 21+8 = 29
29 -2y + 3 = 0 -> y = 16
/ 1x + -2y + 1z = 0
| 0x + 2y + -8z = 8
\ -4x + 5y + 9z = -9
/ 1 -2 1 \ / x \ / 0 \
| 0 2 -8 | X | y | = | 8 |
\ -4 5 9 / \ z / \ -9 /
----------- ----- ------
a x b
= numpy.linalg.lstsq(a, b)[0]
= numpy.linalg.solve(a, b)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/solve.py
3)特征值和特征向量:eig()
对于n阶方阵A,如果存在数a和非零n维向量x,使得Ax=ax,则称a是矩阵A的一个特征值,x是矩阵A属于特征值a的特征向量。
numpy.linalg.eig(A) -> a, x
a: 1 2
| |
v v
x: 1 2
3 4
5 6
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/eig.py
4)奇异值分解:svd()
对于一个满足特定条件的矩阵M,可以被分解为三个矩阵的乘积,M=USV,其中U和V都是正交矩阵,即UU^T=I,VV^T=I
,S矩阵除主对角线以外的元素均为0,主对角线上的元素被称为矩阵M的奇异值。
numpy.linalg.svd(M)-> U, S主对角线上的元素, V
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/svd.py
5)广义逆矩阵:pinv()
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/pinv.py
6)行列式:det()
a b
c d ad-bc
a b c
d e f
g h i
a e f - b d f + c d e
h i g i g h
a(ei-gh)-b(di-fg)+c(dh-eg)
numpy.linalg.det(方阵)->行列式的值
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/det.py
2.快速傅里叶变换模块(fft)
s=F(t) -> (A/P, fai) = G(f)
y = Asin(wx+fai)
w1 -> A1, f1
w2 -> A2, f2
...
(A, fai) = f(w)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/fft.py
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/filter.py
3.随机数模块(random)
1)二项分布
numpy.random.binomial(n, p, size)
->包含size个随机数的数组,其中每个随机数来自n次尝试中的成功次数,每次尝试成功的概率为p。
猜硬币游戏:初始筹码1000,每轮猜9次,猜对5次或5次以上为赢,筹码加一,否则为输,筹码减一。模拟10000轮,记录筹码数的变化。binomial(9, 0.5, 10000)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/bi.py
2)超几何分布
numpy.random.hypergeometric(ngood, nbad,
nsample, size)->包含size个随机数的数组,其中每个随机数来自随机抽取nsample个样本中好样本的个数,总样本中共有ngood个好样本,nbad个坏样本。
摸球球游戏:将25个好球和1个坏球放在一起,每轮摸出3个球,全为好球加1分,若有坏球则减6分。模拟100轮,记录分值的变化。hypergeometric(25, 1, 3, 100)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/hyper.py
3)正态分布
numpy.random.normal(size)->包含size个随机数的数组,其中每个随机数服从标准正态分布规律,即平均值为0,标准差为1的正态分布。
[1 1 2 1 1 2 2 2 5 1 2 3 ... 10 10]
[1, 3] 20
[4, 6] 60
[7, 10] 40
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/norm.py
七、Numpy的专用函数
1.间接联合排序
间接:获取排序样本的下标。
0 1 2 3 4 5 6 7 8
原始序列:8 2 3 1 7 4 6 5 9
直接排序:1 2 3 4 5 6 7 8 9
间接排序:3 1 2 5 7 6 4 0 8
姓名:张三 李四 王五 赵六 陈七
成绩:90 70 50 80 60
0 1 2 3 4
2 4 1 3 0
年龄:20 30 30 20 40
3 0 2 1 4
numpy.lexsort((参考序列, 待排序列))->索引序列
numpy.sort_complex(复数数组)->按实部的升序排列,实部相同的参考虚部的升序
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/sort.py
2.最大值最小值
numpy.xxx
max/min
argmax/argmin
nanmax/nanmin
nanargmax/nanargmin
---------------------------
max - 最大值
min - 最小值
arg - 间接,下标
nan - 忽略无效值
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/nan.py
3.有序插入
有序序列:[1, 2, 4, 5, 6, 8, 9]
被插序列:[7, 3]
将被插序列插入到有序序列的什么位置,结果还是有序的?
numpy.searchsorted(有序序列, 被插序列)->插入位置
numpy.insert(有序序列, 插入位置, 被插序列)->插入结果
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/insert.py
4.定积分
y = f(x)
/ b
| f(x)dx
/ a
import scipy.integrate as si
def f(x):
y = ... x ...
return y
si.quad(f, a, b)[0] -> 定积分值
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/integ.py
5.插值
import scipy.interpolate as si
si.interp1d(离散样本水平坐标,离散样本垂直坐标,
kind=插值器种类)->一维插值器对象
一维插值器对象(插值样本水平坐标)->插值样本垂直坐标
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/inter.py
6.金融计算
1)绘制K线图
import mpl_finance as mf
mf.candlestick_ohlc(坐标图对象, 日期和开高低收价格数组,K线实体部分宽度(0-1), 阳线颜色, 阴线颜色)
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/k (2).py
2)终值和现值
参考代码:https://github.com/hilqiqi0/AI/blob/master/5.DS/code/numpy/fin.py
八、补充:
matplotlib颜色:https://matplotlib.org/examples/color/colormaps_reference.html
九、附录:目录