此为历史版本和 IPFS 入口查阅区,回到作品页
為自己Coding
IPFS 指纹 这是什么

作品指纹

Python讀書會 - 公開課程讀書會筆記 - NumPy的基礎運算

為自己Coding
·
·

Github連結

攝影師:eberhard grossgasteiger,連結:Pexels



哈囉,大家好!!由於小弟最近接到擔任舉辦讀書會的講師,而這個讀書會是根據莫凡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]]
CC BY-NC-ND 2.0 授权