numpy入門指南
當我們準備把機器學習的各種演算法使用python語言落地實現時,有一個工具我們一定要使用,那就是numpy。因為numpy底層使用C++實現,利用了CPU或者GPU的技術,使得numpy的矩陣運算比python本身自帶的list資料結構運算高效很多,特別是在處理大資料時,其優勢更是明顯。本文主要介紹numpy的基本使用方法,更多高階用法大家可以參考
一、numpy的安裝及匯入
安裝:命令列中輸入以下程式碼
pip3 install numpy
匯入:為了簡便,這裡使用np作為numpy的縮寫
import numpy as np
二、新建矩陣以及numpy矩陣的屬性
新建矩陣:使用array函式,傳入一個list
numpy矩陣屬性含義:
ndim:矩陣的維數
shape:矩陣的形狀(每一個維度上的size)
size:矩陣的大小(第一個維度上的size)
array = np.array([[1, 2, 3], [2, 3, 4]])print('dim:', array.ndim)# 輸出 dim: 2print('shape:', array.shape)# 輸出 shape: (2, 3)print('size:', array.size)# 輸出 size: 6
三、建立不同型別的基本矩陣
array:根據傳入的list建立矩陣
zeros:根據傳入的shape建立一個零矩陣(每個元素都為零)
empty:根據傳入的shape建立一個幾乎為零的矩陣(每個元素都幾乎為零)
arange:
三個引數時:
第一個參數列示起始值,第二個參數列示結尾值,第三個參數列示增長值
一個引數時:
相當於起始值為0,結尾值為該引數,增長值為1
linspace:第一個參數列示起始值,第二個參數列示結束值,第三個參數列示要分成份數
random.random:根據傳入的shape生成一個隨機矩陣,每一個元素的值都是隨機數
(引數dtype用來定義矩陣元素的儲存型別,reshape函式,將矩陣按照傳入的shape調整矩陣形狀)
a = np.array([[2, 33, 55], [3, 9, 13]], dtype=np.float32)# array([[ 2., 33., 55.],# [ 3., 9., 13.]], dtype=float32)b = np.zeros((3, 4), dtype=np.int64)# array([[0, 0, 0, 0],# [0, 0, 0, 0],# [0, 0, 0, 0]])c = np.empty((3, 4))# array([[ 0.00000000e+000, 0.00000000e+000, 2.12397093e-314, 2.12524611e-314],# [ 2.14770623e-314, 2.12331478e-314, 2.12331472e-314, 2.12400038e-314],# [ 2.12400043e-314, 2.14741897e-314, 2.13926764e-314, 2.14770776e-314]])d = np.arange(3, 9, 1)# array([3, 4, 5, 6, 7, 8])e = np.arange(12).reshape((3, 4))# array([[ 0, 1, 2, 3],# [ 4, 5, 6, 7],# [ 8, 9, 10, 11]])f = np.linspace(1, 21, 10).reshape((5, 2))# array([[ 1. , 3.22222222],# [ 5.44444444, 7.66666667],# [ 9.88888889, 12.11111111],# [ 14.33333333, 16.55555556],# [ 18.77777778, 21. ]])g = np.random.random((3, 4))# array([[ 0.17233778, 0.46768354, 0.14473541, 0.02593317],# [ 0.77383741, 0.71766547, 0.90690193, 0.83787435],# [ 0.76650035, 0.21221298, 0.61345672, 0.51163584]])
四、矩陣的基本運算
矩陣的基本運算有 加(+)、減(-)、乘(*)、除(/)、乘方(**)、是否等於(==或者!=)、點乘(dot)
a = np.array([10, 20, 30, 40]) b = np.arange(1, 5, 1)print('sum = t', a + b)print('diff = t', a - b)print('prod = t', a * b)print('divi = t', a / b)print('pow = t', a ** 3)print('!= = t', a != 10)print('dot = t', np.dot(a, b))print('dot = t', a.dot(b))
五、矩陣的高階運算
求和(sum)、最大值(max)、最小值(min)、最大索引值(argmax)、最小索引值(argmin)、加權平均(average)、累加值(cumsum)、差值(diff)、非零元素索引值(nonzero)、排序(sort)、轉置(transpose或者T)、修剪(clip)、平均值(mean)
(引數:axis=0表示縱向,axis=1表示橫向)
c = np.arange(12, 0, -1).reshape((3, 4))print(c)# axis=1每一行 axis=0每一列print('sum = t', np.sum(c, axis=1))print('max = t', np.max(c, axis=0))print('min = t', np.min(c, axis=0))print('argmax = t', np.argmax(c))print('argmin = t', np.argmin(c))print('average = t', np.average(c))print('cumsum = t', np.cumsum(c))print('diff = t', np.diff(c))print('nonzero = t', np.nonzero(c))print('sort = t', np.sort(c))print('transpose = t', np.transpose(c))print('c.T = t', c.T)print('clip = t', np.clip(c, 5, 9))print('mean = t', np.mean(c, axis=1))
六、矩陣的合併
vstack 縱向合併
hstack 橫向合併
concatenate 透過指定axis引數的值決定是縱向合併還是橫向合併
# newaxis 加一個維度A = np.array([1, 1, 1])[np.newaxis,:] B = np.array([2, 2, 2])[np.newaxis,:]# vertial 縱向合併print(np.vstack((A, B)))# horizontal 橫向合併print(np.hstack((A, B)))# axis=0 縱向 axis=1 橫向C = np.concatenate((A, B, B, A), axis=0)print(C)
七、矩陣的分割
vsplit 縱向分割
hsplit 橫向分割
split 透過指定axis引數的值決定是縱向分割還是橫向分割
A = np.arange(1, 13, 1).reshape((3, 4))print(A)# axis=0 縱向分割 axis=1 橫向分割# 等項分割print(np.split(A, 2, axis=1))# 不等項分割print(np.array_split(A, 3, axis=1))# vsplit(axis=0), hsplit(axis=1)print(np.vsplit(A, 3))print(np.hsplit(A, 2))
八、矩陣的淺複製與深複製
= 淺複製,只是複製了引用
copy() 深複製
# 淺複製 只是複製了引用 A = np.array([1, 2, 3]) B = A A[0] = 99 print(A) print(B) # 深複製 B = A.copy() A[0] = 88 print(A) print(B)
作者:大雄的學習人生
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4560/viewspace-2804549/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Numpy 入門
- Numpy使用入門
- Python機器學習、深度學習:快速、完全的Numpy入門指南Python機器學習深度學習
- numpy 基礎入門 - 30分鐘學會numpy
- 清晰易懂的Numpy入門教程
- NumPy從入門到放棄
- Python中的Numpy入門教程Python
- Zookeeper入門指南
- CPack 入門指南
- Docker 入門指南Docker
- EOS 入門指南
- Vue 入門指南Vue
- RabbitMQ入門指南MQ
- Nginx入門指南Nginx
- Vagrant 入門指南
- React 入門指南React
- Flask 入門指南Flask
- gulp入門指南
- OSWorkFlow入門指南
- CouchDB 入門指南
- RxJava入門指南RxJava
- ODA入門指南
- MySQL 入門指南MySql
- Markdown入門指南
- Python科學計算 - Numpy快速入門Python
- KNIME快速入門指南
- Markdown快速入門指南
- CodeMirror入門指南
- GitHub Actions 入門指南Github
- RequireJS入門指南UIJS
- Vuex新手入門指南Vue
- Airflow使用入門指南AI
- 自學機器學習入門指南機器學習
- Maven入門指南(一)Maven
- Bash快速入門指南
- mongoDB 入門指南、示例MongoDB
- 資訊保安入門指南
- 《Gulp 入門指南》- 前言