Python讀書會 - 公開課程讀書會筆記 - NumPy的基礎運算
Github連結
哈囉,大家好!!由於小弟最近接到擔任舉辦讀書會的講師,而這個讀書會是根據莫凡Python公開課程所開設的,大家希望我可以帶他們看過莫凡Python的相關系列課程,所以讀書會這個系列主要是根據莫凡Python的公開系列課程講解和筆記,當然我也會額外找尋資料並補充給大家,也因為是根據公開課程的筆記,所以我都會明確記錄出處,如果有違反作者權力,麻煩告知,我會在第一時間立即刪除這系列的文章,感謝大家,當然也要特別感謝莫凡Python這麼厲害的公開課程,讓大家可以無痛初探Python的魔法世界!!
我是跟其他優秀的講師一起開設莫凡Python讀書會的,所以我不會每個章節都有筆記喔XD!!
1. NumPy 基礎運算 - part 1
課程資料來源: 5 numpy的基础运算 (教学教程)
創建兩個Array
import numpy as np a = np.array([10,20,30,40,50,60,70,80]) b = np.arange(8) print(a) print(b)
執行結果
[10 20 30 40 50 60 70 80] [0 1 2 3 4 5 6 7]
相減
c = a - b print(c)
執行結果
[10 19 28 37 46 55 64 73]
相加
c = a + b print(c)
執行結果
[10 21 32 43 54 65 76 87]
相乘
c = a * b print(c)
執行結果
[ 0 20 60 120 200 300 420 560]
平方
c = a**2 print(c) c = b**2 print(c)
執行結果
[ 100 400 900 1600 2500 3600 4900 6400] [ 0 1 4 9 16 25 36 49]
三角函數
c = 60 * np.sin(a) print(c) c = 80 * np.cos(b) print(c) c = 100 * np.tan(c) print(c)
執行結果
[-32.64126665 54.77671504 -59.28189745 44.70678963 -15.74249122 -18.28863727 46.43344089 -59.63331924] [ 80. 43.22418447 -33.29174692 -79.19939973 -52.29148967 22.69297484 76.81362293 60.31218035] [900.36549456 -94.68656446 317.61189136 -77.54375755 204.29086558 84.54150965 638.32447047 71.68114405]
邏輯判斷
print(b<6) print(a>60) print(a == 10)
執行結果
[ True True True True True True False False] [False False False False False False True True] [ True False False False False False False False]
建立多維度矩陣
## 建立2x2 二維矩陣 a = np.array([[0, 1], [1, 1]]) b = np.arange(4).reshape((2,2)) print(a) print(b)
執行結果
[[0 1] [1 1]] [[0 1] [2 3]]
矩陣乘法運算
補充: 矩陣內積(dot product)運算
dot 用法一
c = a * b c_dot = np.dot(a, b) print(c) print(c_dot)
執行結果
[[0 1] [2 3]] [[2 3] [2 4]]
dot用法二
c_dot_2 = a.dot(b) print(c_dot_2)
執行結果
[[2 3] [2 4]]
補充:算法
總和、最大值、最小值 - Sum()、Min()、Max() 使用
import numpy as np a = np.random.random((5,6)) print(a)
執行結果
[[0.22667025 0.24476951 0.29306952 0.3450058 0.63912861 0.79662982] [0.88662849 0.65370446 0.6548403 0.20491901 0.40666716 0.81507563] [0.13013511 0.28810707 0.24427537 0.16024315 0.42845645 0.74784296] [0.10849957 0.04899922 0.41436152 0.48937569 0.83951887 0.04038496] [0.96675396 0.38796374 0.0566646 0.56787626 0.70060591 0.8537359 ]]
計算總和、最大值、最小值
print(np.sum(a)) print(np.max(a)) print(np.min(a))
執行結果
13.640908877413128 0.9667539599675172 0.04038496110920331
針對軸的方向進行查找
- axis = 1: 以行來查找
- axis = 0: 以列來查找
print("a: ", a) print("sum: ", np.sum(a, axis = 0)) print("min: ", np.min(a, axis = 1)) print("max: ", np.max(a, axis = 1))
執行結果
a: [[0.22667025 0.24476951 0.29306952 0.3450058 0.63912861 0.79662982] [0.88662849 0.65370446 0.6548403 0.20491901 0.40666716 0.81507563] [0.13013511 0.28810707 0.24427537 0.16024315 0.42845645 0.74784296] [0.10849957 0.04899922 0.41436152 0.48937569 0.83951887 0.04038496] [0.96675396 0.38796374 0.0566646 0.56787626 0.70060591 0.8537359 ]] sum: [2.31868738 1.62354401 1.66321131 1.76741992 3.014377 3.25366926] min: [0.22667025 0.20491901 0.13013511 0.04038496 0.0566646 ] max: [0.79662982 0.88662849 0.74784296 0.83951887 0.96675396]
2. NumPy基礎運算 - part 2
課程資料來源: 6 numpy的基础运算2 (教学教程)
創建數組
import numpy as np A = np.arange(2, 18).reshape((4, 4)) print(A)
執行結果
[[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13] [14 15 16 17]]
找尋最大值與最小值位置索引
## 找尋最小值位置索引 print(np.argmin(A)) ## 找尋最大值位置索引 print(np.argmax(A))
執行結果
0 15
均值
print(np.mean(A)) print(np.average(A)) print(A.mean())
執行結果
9.5 9.5 9.5
中位數
# print(A.median()) np.medium(A)
執行結果
AttributeError: module 'numpy' has no attribute 'medium'
錯誤原因: 沒有這個NumPy屬性用法
參考: https://stackoom.com/question/2iJ5b
累加
print(np.cumsum(A))
執行結果
[ 2 5 9 14 20 27 35 44 54 65 77 90 104 119 135 152]
累差
print(np.diff(A))
執行結果
[[1 1 1] [1 1 1] [1 1 1] [1 1 1]]
得到陣列Array中非零元素所在的位置索引
補充: np.nonzeros用法
print(A) print(np.nonzero(A))
執行結果
[[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13] [14 15 16 17]] (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3], dtype=int64), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
自動排序
import numpy as np A = np.arange(18, 2, -1).reshape((4,4)) print(A) ## 排序 print(np.sort(A))
執行結果
[[18 17 16 15] [14 13 12 11] [10 9 8 7] [ 6 5 4 3]] [[15 16 17 18] [11 12 13 14] [ 7 8 9 10] [ 3 4 5 6]]
矩陣轉置
print(A) print(A.T) print(np.transpose(A))
執行結果
[[18 17 16 15] [14 13 12 11] [10 9 8 7] [ 6 5 4 3]] [[18 14 10 6] [17 13 9 5] [16 12 8 4] [15 11 7 3]] [[18 14 10 6] [17 13 9 5] [16 12 8 4] [15 11 7 3]]
clip用法: 將比指定的最小值小的元素轉為指定的最小值,將比指定的最大值大的元素轉為指定的最大值
print(A) print(np.clip(A, 6, 16))
執行結果
[[18 17 16 15] [14 13 12 11] [10 9 8 7] [ 6 5 4 3]] [[16 16 16 15] [14 13 12 11] [10 9 8 7] [ 6 6 6 6]]