序言
什麼是 NumPy 呢?
NumPy 這個詞來源於兩個單詞 – Numerical
和Python
。其是一個功能強大的 Python 庫,可以幫助程序員輕鬆地進行數值計算,通常應用於以下場景:
- 執行各種數學任務,如:數值積分、微分、內插、外推等。因此,當涉及到數學任務時,它形成了一種基於 Python 的 MATLAB 的快速替代。
- 計算機中的圖像表示爲多維數字數組。NumPy 提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等。
- 在編寫機器學習算法時,需要對矩陣進行各種數值計算。如:矩陣乘法、求逆、換位、加法等。NumPy 數組用於存儲訓練數據和機器學習模型的參數。
練習作業
1. 創建從0到9的一維數字數組。
【知識點:數組的創建】
- 如何創建一維數組?
【答案】
import numpy as np
arr = np.arange(10)
print(arr)
# [0 1 2 3 4 5 6 7 8 9]
2. 創建一個元素全爲True
的 3×3 數組。
【知識點:數組的創建】
- 如何創建一個布爾數組?
【答案】
import numpy as np
arr = np.full([3, 3], True, dtype=np.bool)
print(arr)
# [[ True True True]
# [ True True True]
# [ True True True]]
3. 從arr
中提取所有奇數。
arr = np.arange(10)
【知識點:搜索】
- 如何從一維數組中提取滿足指定條件的元素?
【答案】
import numpy as np
arr = np.arange(10)
# 方法1
index = np.where(arr % 2 == 1)
print(arr[index])
# [1 3 5 7 9]
# 方法2
x = arr[arr % 2 == 1]
print(x)
# [1 3 5 7 9]
4. 將arr
中的偶數元素替換爲0。
arr = np.arange(10)
【知識點:搜索】
- 如何用numpy數組中的另一個值替換滿足條件的元素項?
【答案】
import numpy as np
arr = np.arange(10)
index = np.where(arr % 2 == 0)
arr[index] = 0
print(arr)
# [0 1 0 3 0 5 0 7 0 9]
5. 將 arr
中的所有偶數元素替換爲0,而不改變arr。
arr = np.arange(10)
【知識點:搜索】
- 如何在不影響原始數組的情況下替換滿足條件的元素項?
【答案】
import numpy as np
arr = np.arange(10)
# 方法1
x = np.where(arr % 2 == 0, 0, arr)
print(x)
# [0 1 0 3 0 5 0 7 0 9]
print(arr)
# [0 1 2 3 4 5 6 7 8 9]
# 方法2
x = np.copy(arr)
x[x % 2 == 0] = 0
print(x)
# [0 1 0 3 0 5 0 7 0 9]
print(arr)
# [0 1 2 3 4 5 6 7 8 9]
6. 將 arr
轉換爲2行的2維數組。
arr = np.arange(10)
【知識點:數組的操作】
- 如何改變數組的形狀?
【答案】
import numpy as np
arr = np.arange(10)
# 方法1
x = np.reshape(arr, newshape=[2, 5])
print(x)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
# 方法2
x = np.reshape(arr, newshape=[2, -1])
print(x)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
7. 垂直堆疊數組a和數組b。
a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
【知識點:數組操作】
- 如何垂直疊加兩個數組?
【答案】
import numpy as np
a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
print(a)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
print(b)
# [[1 1 1 1 1]
# [1 1 1 1 1]]
# 方法1
print(np.concatenate([a, b], axis=0))
# [[0 1 2 3 4]
# [5 6 7 8 9]
# [1 1 1 1 1]
# [1 1 1 1 1]]
# 方法2
print(np.vstack([a, b]))
# [[0 1 2 3 4]
# [5 6 7 8 9]
# [1 1 1 1 1]
# [1 1 1 1 1]]
8. 將數組a與數組b水平堆疊。
a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
【知識點:數組的操作】
- 如何水平疊加兩個數組?
【答案】
import numpy as np
a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
print(a)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
print(b)
# [[1 1 1 1 1]
# [1 1 1 1 1]]
# 方法1
print(np.concatenate([a, b], axis=1))
# [[0 1 2 3 4 1 1 1 1 1]
# [5 6 7 8 9 1 1 1 1 1]]
# 方法2
print(np.hstack([a, b]))
# [[0 1 2 3 4 1 1 1 1 1]
# [5 6 7 8 9 1 1 1 1 1]]
9. 獲取數組a和數組b之間的公共項。
a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
【知識點:集合操作】
- 如何獲取兩個numpy數組之間的公共項?
【答案】
import numpy as np
a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
x = np.intersect1d(a, b)
print(x) # [2 4]
10. 從數組a中刪除數組b中的所有項。
a = np.array([1, 2, 3, 4, 5])
b = np.array([5, 6, 7, 8, 9])
【知識點:集合操作】
- 如何從一個數組中刪除存在於另一個數組中的項?
【答案】
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([5, 6, 7, 8, 9])
x = np.setdiff1d(a, b)
print(x) # [1 2 3 4]
11. 獲取a和b元素匹配的位置。
a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
【知識點:邏輯函數】
- 如何得到兩個數組元素匹配的位置?
【答案】
import numpy as np
a = np.array([1, 2, 3, 2, 3, 4, 3, 4, 5, 6])
b = np.array([7, 2, 10, 2, 7, 4, 9, 4, 9, 8])
mask = np.equal(a, b)
# 方法1
x = np.where(mask)
print(x) # (array([1, 3, 5, 7], dtype=int64),)
# 方法2
x = np.nonzero(mask)
print(x) # (array([1, 3, 5, 7], dtype=int64),)
12. 獲取5到10 之間的所有元素。
a = np.array([2, 6, 1, 9, 10, 3, 27])
【知識點:邏輯函數】
- 如何從numpy數組中提取給定範圍內的所有元素?
【答案】
import numpy as np
a = np.array([2, 6, 1, 9, 10, 3, 27])
mask = np.logical_and(np.greater_equal(a, 5), np.less_equal(a, 10))
# 方法1
x = np.where(mask)
print(a[x]) # [ 6 9 10]
# 方法2
x = np.nonzero(mask)
print(a[x]) # [ 6 9 10]
# 方法3
x = a[np.logical_and(a >= 5, a <= 10)]
print(x) # [ 6 9 10]
13. 交換數組arr中的列1和列2。
arr = np.arange(9).reshape(3, 3)
【知識點:索引與切片】
- 如何交換二維數組中的兩列?
【答案】
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[:, [2, 1, 0]]
print(x)
# [[2 1 0]
# [5 4 3]
# [8 7 6]]
14. 交換數組arr中的第1行和第2行。
arr = np.arange(9).reshape(3, 3)
【知識點:索引與切片】
- 如何交換二維數組中的兩行?
【答案】
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[[1, 0, 2], :]
print(x)
# [[3 4 5]
# [0 1 2]
# [6 7 8]]
15. 反轉二維數組arr的行。
arr = np.arange(9).reshape(3, 3)
【知識點:索引與切片】
- 如何反轉二維數組的行?
【答案】
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[::-1, :]
print(x)
# [[6 7 8]
# [3 4 5]
# [0 1 2]]
16. 反轉二維數組arr的列。
arr = np.arange(9).reshape(3, 3)
【知識點:索引與切片】
- 如何反轉二維數組的列?
【答案】
import numpy as np
arr = np.arange(9).reshape(3, 3)
print(arr)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
x = arr[:, ::-1]
print(x)
# [[2 1 0]
# [5 4 3]
# [8 7 6]]
17. 創建一個形爲5×3的二維數組,以包含5到10之間的隨機數。
【知識點:隨機抽樣】
- 如何創建隨機二維數組?
【答案】
import numpy as np
x = np.random.randint(5, 10, [5, 3])
print(x)
# [[5 8 8]
# [5 6 8]
# [8 8 7]
# [6 7 9]
# [6 5 8]]
x = np.random.uniform(5, 10, [5, 3])
print(x)
# [[6.73675226 8.50271284 9.66526032]
# [9.42365472 7.56513263 7.86171898]
# [9.31718935 5.71579324 9.92067933]
# [8.90907128 8.05704153 6.0189007 ]
# [8.70753644 7.75056151 5.71714203]]
18. 只打印或顯示numpy數組rand_arr的小數點後3位。
rand_arr = np.random.random([5, 3])
【知識點:輸入和輸出】
- 如何在numpy數組中只打印小數點後三位?
【答案】
import numpy as np
rand_arr = np.random.random([5, 3])
print(rand_arr)
# [[0.33033427 0.05538836 0.05947305]
# [0.36199439 0.48844555 0.26309599]
# [0.05361816 0.71539075 0.60645637]
# [0.95000384 0.31424729 0.41032467]
# [0.36082793 0.50101268 0.6306832 ]]
np.set_printoptions(precision=3)
print(rand_arr)
# [[0.33 0.055 0.059]
# [0.362 0.488 0.263]
# [0.054 0.715 0.606]
# [0.95 0.314 0.41 ]
# [0.361 0.501 0.631]]
19. 將numpy數組a中打印的項數限制爲最多6個元素。
【知識點:輸入和輸出】
- 如何限制numpy數組輸出中打印的項目數?
【答案】
import numpy as np
a = np.arange(15)
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
np.set_printoptions(threshold=6)
print(a)
# [ 0 1 2 ... 12 13 14]
20. 打印完整的numpy數組a而不中斷。
【知識點:輸入和輸出】
- 如何打印完整的numpy數組而不中斷?
【答案】
import numpy as np
a = np.arange(15)
np.set_printoptions(threshold=6)
print(a)
# [ 0 1 2 ... 12 13 14]
np.set_printoptions(threshold=np.iinfo(np.int).max)
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
當前活動
我是 終身學習者“老馬”,一個長期踐行“結伴式學習”理念的 中年大叔。
我崇尚分享,渴望成長,於2010年創立了“LSGO軟件技術團隊”,並加入了國內著名的開源組織“Datawhale”,也是“Dre@mtech”、“智能機器人研究中心”和“大數據與哲學社會科學實驗室”的一員。
願我們一起學習,一起進步,相互陪伴,共同成長。
後臺回覆「搜搜搜」,隨機獲取電子資源!
歡迎關注,請掃描二維碼: