人工智慧機器學習有關-Numpay(三)
阿新 • • 發佈:2021-10-21
人工智慧機器學習有關-Numpay(三)
1、Numpy介紹
-
定義:
- Numpy是一個開源的Python科學計算庫,用於快速處理任意維度的陣列。
- Numpy中,儲存物件是ndarray。
-
建立Numpy:
import numpy as np np.array([])
-
numpy優勢
- 記憶體塊風格--一體式儲存
- 支援並行化運算
- 效率高於純python程式碼---底層使用了c,內部釋放了GIL
2、N維陣列
-
ndarray的屬性
- ndarray.shape:陣列維度的元組
- ndarray.ndim:陣列維度
- ndarray.size:陣列中的元素數量
- ndarray.itemsize:一個數組元素的長度
- ndarray.dtype:陣列元素的型別
-
ndarray的形狀
np.array()
三維陣列不好理解---excel中有多個sheet
-
ndarray的型別
bool
int
float
str.....
注意:如果不指定,正說預設為int64,小數預設為float64。
3、Numpy的基本操作
-
生成陣列的方法
-
生成0和1陣列
- np.ones()
- np.ones_like()
-
從現有陣列中生成
- np.array---深拷貝
- np.asarray--淺拷貝
-
生成等間隔陣列
-
np.linspace(1,100,11) #從1到100,間隔是11;效果如下:
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.])
-
np.arange(10,50,2) #從10到50,間隔是2;效果如下:
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48])
-
np.logspace(1,3,1) #生成以10的N次冪的資料;效果如下:
array([ 10., 100., 1000.])
-
-
生成隨機陣列
使用np.random
-
均勻分佈
- np.random.rand(2,3) #隨機生成兩行三列的陣列,效果如下:
array([[0.35756598, 0.57026639, 0.02924949], [0.02111498, 0.72537111, 0.94669752]])
-
np.random.uniform(low=1,high=10,size=([3,5]))#下限是1,上限是10,生成三行五列;效果如下
array([[3.15528825, 1.01357735, 4.72909696, 8.01292636, 4.8997339 ], [5.65180884, 4.07661969, 9.52166085, 4.26229383, 3.72778983], [8.32872314, 3.17203041, 2.16791937, 3.95843925, 8.59350188]])
-
正態分佈
-
均值:圖形的左右位置
-
方差:影象是瘦還是胖
值越小,圖形越瘦高,資料越集中
值越大,圖形越矮胖,資料越分散
-
-
-
正態分佈建立方式
- np.random.randn(d0,d1,d2.....)
- np.random.normal(loc=0.0,scale=1.0,size=None);loc代表比概率分佈的均值;scale代表次概率分佈的標準差;size表示輸出的shape,預設為None,只輸出一個值。
- np.random.standard_normal(size=None):返回指定形狀的標準正態分佈的陣列
-
4、陣列索引,切片
先對行進行索引,在進行列索引
高維陣列索引,從巨集觀到微觀
-
程式碼如下
stock_change = np.random.normal(0,1,(8,10)) array([[-1.44426604, -0.35956676, 0.10022073, -0.37589995, 0.41068841, 0.35831041, -2.18716918, -0.27044373, -0.60649162, 0.74780256], [ 1.50355343, 0.00727481, 0.70220799, 0.11446953, 2.29954941, -0.06165946, 0.43377417, 2.66687501, 1.31977339, 0.39484888], [ 0.57895097, 0.75483241, 0.46582577, -1.70723503, -0.4722333 , 1.36472691, 0.31702275, 0.95247131, 1.13712267, -0.92562661], [ 0.42483005, -0.52735992, -1.22389302, -0.70718243, -0.74624277, -0.46608281, 2.3002048 , 0.55910289, 1.27616921, -0.22121508], [-0.07102279, 0.23494155, 0.35115159, 0.22186354, 0.85730874, 0.86016689, 0.42037822, -0.36173826, -1.26004742, 0.22148513], [-1.00150606, 0.32304105, -0.64324946, -0.15920028, -0.12329149, -0.91909789, -0.70919568, 0.76674683, -1.23383876, 1.57300598], [-0.40099816, -0.9621985 , -0.55014995, 0.0815694 , 1.16744742, -0.15184784, 0.08657591, -1.00556795, 0.06046253, 0.1674691 ], [ 0.55177698, -1.4687088 , -2.43569035, 1.31883436, -1.06246593, 0.44006957, -0.8233832 , -1.01700783, -0.98957025, 1.10041451]]) #進行切片 stock_change[0:2, 0:3] #從0到2兩行,從0到3三列 array([[-1.44426604, -0.35956676, 0.10022073], [ 1.50355343, 0.00727481, 0.70220799]])
5、形狀修改
stock_change = np.random.normal(0,1,(4,5))
stock_change
array([[-1.13690825, -0.86626341, 0.26315935, -1.50416658, -0.20551933],
[-0.62318598, 0.45052168, -1.31538088, -1.05299411, 0.98931701],
[-0.90524912, -1.27093755, 0.7382356 , 0.94703348, -0.05833449],
[-2.33703858, 0.05670275, 1.97424882, 0.09213721, 0.26717848]])
-
物件.reshape:不進行行列互換,產生新變數
stock_change.resize([5,4]) array([[-0.56597865, 1.37304626, 0.88760232, 1.60456417], [ 0.42406144, 0.85342625, 0.17185211, 0.63999772], [ 0.63243256, -0.14288988, 0.51224131, 0.52807762], [-0.25435597, 1.08117107, -1.27219027, -0.96426461], [ 0.47159064, 1.19946091, 0.10747391, -0.34872273]])
-
物件.resize:進行行列互換,對原來的值進行修改
stock_change.resize([5,4])#不直接輸出結果,改變原來陣列的值 stock_change array([[-0.56597865, 1.37304626, 0.88760232, 1.60456417], [ 0.42406144, 0.85342625, 0.17185211, 0.63999772], [ 0.63243256, -0.14288988, 0.51224131, 0.52807762], [-0.25435597, 1.08117107, -1.27219027, -0.96426461], [ 0.47159064, 1.19946091, 0.10747391, -0.34872273]])
-
物件.T:進行行列互換
stock_change.T array([[-1.13690825, -0.62318598, -0.90524912, -2.33703858], [-0.86626341, 0.45052168, -1.27093755, 0.05670275], [ 0.26315935, -1.31538088, 0.7382356 , 1.97424882], [-1.50416658, -1.05299411, 0.94703348, 0.09213721], [-0.20551933, 0.98931701, -0.05833449, 0.26717848]])
6、型別修改
-
物件.astype(np.int32)#括號裡面是你要修改成的資料型別。例如:
stock_change array([[ 0.70391962, -0.64805071, 1.86832388, -0.99192503, -0.84167201], [-1.05297977, 0.29382444, -1.7573821 , 1.22405082, 1.05422963], [ 0.18694931, -0.54332531, -0.48083977, 0.73456394, 0.03539551], [ 1.98783588, 0.43443585, 0.61193212, -0.31977936, -1.12256928]]) stock_change.astype(np.int32) array([[ 0, 0, 1, 0, 0], [-1, 0, -1, 1, 1], [ 0, 0, 0, 0, 0], [ 1, 0, 0, 0, -1]])
-
物件.tostring()
arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) arr array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) arr.tostring() b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00'
7、陣列的去重
arr= np.array([[1,2,3,4,5,6],[4,5,6,7,8,9]])
arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
np.unique(arr)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
8、ndarray運算
import numpy as np
stock_change = np.random.normal(0,1,(8,10))
stock_change
array([[ 0.04799655, 0.65765235, 0.42361094, 0.81425383, -0.14889895,
0.34435302, -0.89120847, 1.09553709, -0.39220518, 0.35681464],
[-0.1205083 , 1.04201374, -0.84020323, -0.76451012, 0.38678516,
-0.48928631, -0.03033363, -0.64034053, -0.31345406, 1.00351474],
[-1.18944149, -1.21265991, -0.27092964, 0.78723819, 0.86631678,
-0.41733842, -0.17263459, 0.57000637, -0.90242552, 1.1615763 ],
[ 0.20939948, 1.0627663 , -1.11295892, -2.20829153, -0.13560078,
0.04241456, 1.95342178, -1.52867478, -0.4256004 , 1.89226058],
[-1.14428267, -1.03230368, -0.64917991, 0.95959798, -0.1140127 ,
-0.60413769, 0.64979583, 1.96630929, -1.50833397, -0.18793 ],
[-0.16371276, -0.07527353, -1.07491874, -0.460191 , -0.82218305,
1.35116945, 0.0615233 , -1.2129384 , -1.21896538, 0.19445662],
[-2.24073749, -0.4371897 , -0.65786767, -1.20137206, -0.74103418,
0.03041893, 1.92970227, -1.74572423, 0.04164877, 1.58580713],
[ 0.04217637, -0.62788208, 0.15461643, -0.38924692, -0.71137869,
1.86107771, 0.63093733, 0.03397154, -0.02377345, 0.15119872]])
stock_c = stock_change[0:5,0:5]
stock_c
array([[ 0.04799655, 0.65765235, 0.42361094, 0.81425383, -0.14889895],
[-0.1205083 , 1.04201374, -0.84020323, -0.76451012, 0.38678516],
[-1.18944149, -1.21265991, -0.27092964, 0.78723819, 0.86631678],
[ 0.20939948, 1.0627663 , -1.11295892, -2.20829153, -0.13560078],
[-1.14428267, -1.03230368, -0.64917991, 0.95959798, -0.1140127 ]])
-
邏輯運算
stock_c>1 array([[False, False, False, False, False], [False, True, False, False, False], [False, False, False, False, False], [False, True, False, False, False], [False, False, False, False, False]]) stock_c[stock_c>1] = 2 stock_c array([[ 0.04799655, 0.65765235, 0.42361094, 0.81425383, -0.14889895], [-0.1205083 , 2. , -0.84020323, -0.76451012, 0.38678516], [-1.18944149, -1.21265991, -0.27092964, 0.78723819, 0.86631678], [ 0.20939948, 2. , -1.11295892, -2.20829153, -0.13560078],
-
通用判斷函式
-
np.all():滿足所有的要求才返回true
stock_d = stock_change[0:2,0:5] stock_d array([[ 0.04799655, 0.65765235, 0.42361094, 0.81425383, -0.14889895], [-0.1205083 , 2. , -0.84020323, -0.76451012, 0.38678516]]) np.all(stock_d>0) #全部大於0才返回true False
-
np.any():有一個滿足要求就返回true
np.any(stock_d>0) #有一個大於0就返回true True
-
-
三元運算子
- np.where()
np.where(stock_d>0,1,0) #在stock_d中大於0的賦值為1,小於0的賦值為0 array([[1, 1, 1, 1, 0], [0, 1, 0, 0, 1]])
- np.logic_and():並的意思
- np.logic_or:或的意思
-
統計運算
- min:求最小值
- max:求最大值
- midian:求中位數
- mean:均值
- std:標準差
- var:方差
- argmax:最大值下標
- argmin:最小值下標
9、矩陣乘法
-
np.matmul():矩陣相乘,不支援矩陣與數字相乘
a = np.array([[80, 86], [82, 80], [85, 78], [90, 90], [86, 82], [82, 90], [78, 80], [92, 94]]) b = np.array([[0.7], [0.3]]) np.matmul(a,b) array([[81.8], [81.4], [82.9], [90. ], [84.8], [84.4], [78.6], [92.6]])
-
np.dot():點乘,支援矩陣與數字相乘
np.dot(a,10) array([[81.8], [81.4], [82.9], [90. ], [84.8], [84.4], [78.6], [92.6]])
兩者在進行矩陣相乘的時候沒有區別