1、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.pyhtml
2、多維數組
1.numpy.ndarray
numpy中的多維數組是numpy.ndarray類類型的對象,可用於表示數據結構中的任意維度的數組;python
2.建立多維數組對象
numpy.arange(起始, 終止, 步長)->一維數組,首元素就是起始值,尾元素爲終止值以前的最後一個元素,步長即每次遞增的公差。缺省起始值爲0,缺省步長爲1。
numpy.array(任何可被解釋爲數組的容器)git
3.內存連續,元素同質。
4.ndarray.dtype屬性
表示元素的數據類型。經過dtype參數和astype()方法能夠指定和修改元素的數據類型。github
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
對於多字節整數能夠加上字節序前綴:app
= - 處理器系統默認; < - 小端字節序,低數位低地址; > - 大端字節序,低數位高地址。
98dom
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
3、數據可視化: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
4、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
5、矩陣和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)
6、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
7、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
8、補充:matplotlib顏色:https://matplotlib.org/examples/color/colormaps_reference.html