Python機器學習三大件之一numpy
一、前言
機器學習三大件:numpy, pandas, matplotlib
Numpy(Numerical Python)是一個開源的Python科學計算庫,用於快速處理任意維度的數組。
Numpy支持常見的數組和矩陣操作。對於同樣的數值計算任務,使用Numpy比直接使用Python要簡潔的多。
Numpy使用ndarray對象來處理多維數組,該對象是一個快速而靈活的大數據容器。
NumPy提供瞭一個N維數組類型ndarray
import numpy as np score = np.array( [[80, 89, 86, 67, 79], [78, 97, 89, 67, 81], [90, 94, 78, 67, 74], [91, 91, 90, 67, 69], [76, 87, 75, 67, 86], [70, 79, 84, 67, 84], [94, 92, 93, 67, 64], [86, 85, 83, 67, 80]])
score
array([[80, 89, 86, 67, 79],
[78, 97, 89, 67, 81],
[90, 94, 78, 67, 74],
[91, 91, 90, 67, 69],
[76, 87, 75, 67, 86],
[70, 79, 84, 67, 84],
[94, 92, 93, 67, 64],
[86, 85, 83, 67, 80]])
Numpy專門針對ndarray的操作和運算進行瞭設計,所以數組的存儲效率和輸入輸出性能遠優於Python中的嵌套列表,數組越大,Numpy的優勢就越明顯。
從圖中我們可以看出ndarray在存儲數據的時候,數據與數據的地址都是連續的,這樣就給使得批量操作數組元素時速度更快。
list – 分離式存儲,存儲內容多樣化
ndarray – 一體式存儲,存儲類型必須一樣
ndarray支持並行化運算(向量化運算)
ndarray底層是用C語言寫的,效率更高,釋放瞭GIL
二、基本操作
# 生成0和1的數組 ones = np.ones([4,8]) ones
array([[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1.]])
# 生成等間隔的數組 np.linspace(0, 100, 11)
array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.,
100.])
#創建等差數組 — 指定步長 np.arange(10, 50, 2)
array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48])
三、正太分佈
- rand函數根據給定維度生成[0,1)之間的數據,包含0,不包含1
np.random.rand(4,2)
array([[ 0.02173903, 0.44376568],
[ 0.25309942, 0.85259262],
[ 0.56465709, 0.95135013],
[ 0.14145746, 0.55389458]])
- randn函數返回一個或一組樣本,具有標準正態分佈
np.random.randn(2,4)
array([[ 0.27795239, -2.57882503, 0.3817649 , 1.42367345],
[-1.16724625, -0.22408299, 0.63006614, -0.41714538]])
- randint返回隨機整數,范圍區間為[low,high),包含low,不包含high
np.random.randint(1,5) # 返回1個[1,5)時間的隨機整數
4
- 生成均勻分佈的隨機數,舉例1:生成均值為1.75,標準差為1的正態分佈數據,100000000個
x1 = np.random.normal(1.75, 1, 100000000)
array([2.90646763, 1.46737886, 2.21799024, …, 1.56047411, 1.87969135, 0.9028096 ])
- 均勻分佈
# 生成均勻分佈的隨機數 x2 = np.random.uniform(-1, 1, 100000000)
array([ 0.22411206, 0.31414671, 0.85655613, …, -0.92972446, 0.95985223, 0.23197723])
四、數組的索引、切片
# 三維 a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]]) # 返回結果 array([[[ 1, 2, 3], [ 4, 5, 6]], [[12, 3, 34], [ 5, 6, 7]]]) # 索引、切片 a1[0, 0, 1] # 輸出: 2
五、形狀修改
stock_change.reshape([5, 4]) #5*4 stock_change.reshape([-1,10]) #2*10,-1: 表示通過待計算
六、轉置
stock_change.T.shape
七、類型轉換
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]]) arr.tostring()
八、數組的去重
temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]]) >>> np.unique(temp) array([1, 2, 3, 4, 5, 6])
邏輯運算
直接進行大於,小於的判斷:test_score > 60
合適之後,可以直接進行賦值:test_score[test_score > 60] = 1
通用判斷函數
np.all() np.all(score[0:2, :] > 60)
np.any() np.any(score[0:2, :] > 80)
統計運算
np.max()
np.min()
np.median()
np.mean()
np.std()
np.var()
np.argmax(axis=) — 最大元素對應的下標
np.argmin(axis=) — 最小元素對應的下標
九、廣播機制
- 數組運算,滿足廣播機制,就OK
1.維度相等
2.shape(其中對應的地方為1,也是可以的)
arr1 = np.array([[0],[1],[2],[3]]) arr1.shape # (4, 1) arr2 = np.array([1,2,3]) arr2.shape # (3,) arr1+arr2 # 結果是: array([[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]])
到此這篇關於Python機器學習三大件之一numpy的文章就介紹到這瞭,更多相關python numpy內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 玩數據必備Python庫之numpy使用詳解
- python數據分析Numpy庫的常用操作
- Python Numpy中ndarray的常見操作
- python ndarray數組對象特點及實例分享
- Python numpy之線性代數與隨機漫步