[筆記] numpy 用法 (1) 宣告與基本運算

numpy 用法 (1)

安裝:
pip3 install numpy

numpy array

  • 基本用法 array宣告, dimension, shape, size
import numpy as np array = np.array([[1,2,3], [4,5,6]]) print(array) print('number of dim:',array.ndim) print('shape',array.shape) print('size:',array.size) ''' output [[1 2 3] [4 5 6]] ('number of dim:', 2) ('shape', (2, 3)) ('size:', 6) '''
  • 定義資料格式
# 使用 dtype 定義資料格式 a = np.array([2,33,4],dtype=np.int) print(a) # [ 2 33 4] print(a.dtype) # int64 a = np.array([2,33,4],dtype=np.int32) print(a.dtype) # int32 a = np.array([2,33,4],dtype=np.float) print(a.dtype) # float64 a = np.array([2,33,4],dtype=np.float32) print(a.dtype) # float32
  • array 的各種宣告方法
# 宣告全部是 0 的 array zeros = np.zeros( (3,4) ) print(zeros) '''output [[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]] ''' # 宣告全部是 1 的 array 同樣可以使用 dtype 定義資料型態 ones = np.ones( (4,3), dtype=np.int16 ) print(ones) '''output [[1 1 1] [1 1 1] [1 1 1] [1 1 1]] ''' # 宣告 empty 等同於得到一個幾乎接近 0 的 array empty = np.empty((3,4)) print(empty) ''' output [[ 0.00000000e+000 4.94065646e-324 9.88131292e-324 1.48219694e-323] [ 1.97626258e-323 2.47032823e-323 2.96439388e-323 3.45845952e-323] [ 3.95252517e-323 4.44659081e-323 4.94065646e-323 5.43472210e-323]] ''' # 宣告有序陣列 a = np.arange(10,20,2) print(a) # [10 12 14 16 18] # 宣告 0 ~ 11 得陣列,形狀為 3x4 a = np.arange(12).reshape( (3,4) ) print(a) '''output [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] ''' # 宣告一個等分的線段 array a = np.linspace(1,10,5) # 起點 1 終點 10,分 5 等份 print(a) # [ 1. 3.25 5.5 7.75 10. ] # 宣告等分的線段 array 並且排列成 2x3 a = np.linspace(1,10,6).reshape(2,3) # 起點 1 終點 10,分 6 等份 print(a) '''output [[ 1. 2.8 4.6] [ 6.4 8.2 10. ]] '''

numpy 矩陣 (array) 運算

矩陣當中,到底行,列的方向是什麼?
英文:
  • row: 橫的
  • column: 直的
中文:
  • 台灣: 直行橫列
    • row: 列
    • column: 行
  • 大陸: 直列橫行
    • row: 行
    • column: 列
由於中文實在是太混亂了,以下我只要解釋到行列相關的一律採用英文 row, column
  • 對於矩陣中所有元素運算
    # coding=utf-8 import numpy as np a = np.array([10,20,30,40]) b = np.arange(4) print(a,b) # [10 20 30 40] [0 1 2 3] # 對於每個元素取平方 c = b**2 print(c) # [0 1 4 9] s = 10*np.sin(a) print(s) # [-5.44021111 9.12945251 -9.88031624 7.4511316 ] # 比較運算 print(b) # [0 1 2 3] print(b<3) # [ True True True False] print(b==3) # [False False False True]
  • 矩陣與矩陣之間的運算
    # coding=utf-8 import numpy as np a = np.array([[1,1], [0,1]]) b = np.arange(4).reshape((2,2)) print(a) # [[1 1] # [0 1]] print(b) #[[0 1] # [2 3]] # 逐一相乘 print(a*b) # [[0 1] # [0 3]] # 矩陣乘法 (以下兩種寫法是相等的) print(np.dot(a,b)) print(a.dot(b)) #[[2 4] # [2 3]]
  • 找矩陣當中的總和,最大值,最小值
    # coding=utf-8 import numpy as np # 宣告隨機生成的 array a = np.random.random((2,4)) print(a) # [[ 0.44842423 0.78949907 0.8370462 0.44611223] # [ 0.14324946 0.26730942 0.45553012 0.20880903]] # 求矩陣元素總和 print(np.sum(a)) # 3.59597976167 # 求矩陣元素最小值 print(np.min(a)) # 0.14324946148 # 求矩陣元素最大值 print(np.max(a)) # 0.837046196628
  • 使用 axis 針對矩陣中的行或列找總和,最大值,最小值
    # coding=utf-8 import numpy as np # 使用 axis 針對矩陣中的 row, column 做運算 a = np.array([[1,2,3], [9,0,6]]) # 求矩陣 row 元素總和 print(np.sum(a,axis=1)) # [ 6 15] # 1 + 2 + 3 = 6 # 9 + 0 + 6 = 15 # 求矩陣 column 元素最小值 print(np.min(a,axis=0)) # [1 0 3] # min(1,9) = 1 # min(2,0) = 0 # min(3,6) = 3 # 求矩陣 row 元素最大值 print(np.max(a,axis=1)) # [3 9] # max(1,2,3) = 3 # max(9,0,6) = 9
  • 計算矩陣的平均值與中位數
    #coding=utf-8 import numpy as np a = np.arange(2,14).reshape(3,4) print(a) # [[ 2 3 4 5] # [ 6 7 8 9] # [10 11 12 13]] # 平均值 print(np.mean(a)) # 7.5 print(a.mean()) # 7.5 print(np.average(a)) # 7.5 # 搭配 axis 可以得到: # axis = 0: 針對逐 column 的平均值 print(np.mean(a,axis=0)) # [ 6. 7. 8. 9.] ''' mean of (2,6,10) = 6 mean of (3,7,11) = 7 mean of (4,8,12) = 8 mean of (5,9,13) = 9 ''' # axis = 1: 針對逐 row 的平均值 print(np.mean(a,axis=1)) # [ 3.5 7.5 11.5] ''' mean of (2,3,4,5) = 3.5 mean of (6,7,8,9) = 7.5 mean of (10,11,12,13) = 11.5 ''' # 中位數 print(np.median(a)) # 7.5
  • 逐步累加 (cumsum) 與逐步差 (diff)
    #coding=utf-8 import numpy as np # 逐步累加 print(np.cumsum(a)) # [ 2 5 9 14 20 27 35 44 54 65 77 90] # 2 # 2 + 3 = 5 # 2 + 3 + 4 = 9 # 依此類推 # 逐步累差 print(np.diff(a)) ''' [[1 1 1] [1 1 1] [1 1 1]] '''
  • 矩陣的排序 sort 與 transpose
    #coding=utf-8 import numpy as np a = np.random.random((3,4)) print(a) ''' [[ 0.99821757 0.22533492 0.90690435 0.40504797] [ 0.73937987 0.776222 0.60485253 0.44401583] [ 0.33139018 0.14091604 0.81036999 0.74671883]] ''' print(np.sort(a)) ''' 效果:逐列排序 [[ 0.22533492 0.40504797 0.90690435 0.99821757] [ 0.44401583 0.60485253 0.73937987 0.776222 ] [ 0.14091604 0.33139018 0.74671883 0.81036999]] ''' # 矩陣的 transpose print(np.transpose(a)) ''' [[ 0.99821757 0.73937987 0.33139018] [ 0.22533492 0.776222 0.14091604] [ 0.90690435 0.60485253 0.81036999] [ 0.40504797 0.44401583 0.74671883]] '''
  • clip 功能簡介,可以拿來篩選過濾用
    #coding=utf-8 import numpy as np a = np.arange(2,14).reshape(3,4) print(a) # [[ 2 3 4 5] # [ 6 7 8 9] # [10 11 12 13]] # clip 功能 print(np.clip(a,5,9)) # 意思:所有小於等於 5 的數都用 5 代替; 所有大於等於 9 的數都用 9 代替 ''' [[5 5 5 5] [6 7 8 9] [9 9 9 9]] '''

留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking