序言什么是 NumPy 呢? NumPy 這個詞來源于兩個單詞 -- Numerical 和Python ,。其是一個功能強大的 Python 庫,,可以幫助程序員輕松地進行數(shù)值計算,通常應(yīng)用于以下場景: 執(zhí)行各種數(shù)學(xué)任務(wù),,如:數(shù)值積分,、微分、內(nèi)插,、外推等,。因此,,當涉及到數(shù)學(xué)任務(wù)時,,它形成了一種基于 Python 的 MATLAB 的快速替代,。 計算機中的圖像表示為多維數(shù)字數(shù)組。NumPy 提供了一些優(yōu)秀的庫函數(shù)來快速處理圖像,。例如,鏡像圖像,、按特定角度旋轉(zhuǎn)圖像等,。 在編寫機器學(xué)習算法時,需要對矩陣進行各種數(shù)值計算,。如:矩陣乘法,、求逆、換位、加法等,。NumPy 數(shù)組用于存儲訓(xùn)練數(shù)據(jù)和機器學(xué)習模型的參數(shù),。
練習作業(yè)1. 創(chuàng)建從0到9的一維數(shù)字數(shù)組。 【知識點:數(shù)組的創(chuàng)建】 【答案】 import numpy as np
arr = np.arange(10) print(arr) # [0 1 2 3 4 5 6 7 8 9]
2. 創(chuàng)建一個元素全為True 的 3×3 數(shù)組,。 【知識點:數(shù)組的創(chuàng)建】 【答案】 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 中提取所有奇數(shù),。 【知識點:搜索】 【答案】 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 中的偶數(shù)元素替換為0。 【知識點:搜索】 【答案】 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 中的所有偶數(shù)元素替換為0,,而不改變arr。 【知識點:搜索】 【答案】 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 轉(zhuǎn)換為2行的2維數(shù)組,。 【知識點:數(shù)組的操作】 【答案】 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. 垂直堆疊數(shù)組a和數(shù)組b,。 a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
【知識點:數(shù)組操作】 【答案】 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. 將數(shù)組a與數(shù)組b水平堆疊。 a = np.arange(10).reshape([2, -1])
b = np.repeat(1, 10).reshape([2, -1])
【知識點:數(shù)組的操作】 【答案】 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. 獲取數(shù)組a和數(shù)組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]) x = np.intersect1d(a, b) print(x) # [2 4]
10. 從數(shù)組a中刪除數(shù)組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])
【知識點:邏輯函數(shù)】 【答案】 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])
【知識點:邏輯函數(shù)】 【答案】 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. 交換數(shù)組arr中的列1和列2,。 【知識點:索引與切片】 【答案】 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. 交換數(shù)組arr中的第1行和第2行。 【知識點:索引與切片】 【答案】 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. 反轉(zhuǎn)二維數(shù)組arr的行,。 【知識點:索引與切片】 【答案】 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. 反轉(zhuǎn)二維數(shù)組arr的列,。 【知識點:索引與切片】 【答案】 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. 創(chuàng)建一個形為5×3的二維數(shù)組,以包含5到10之間的隨機數(shù),。 【知識點:隨機抽樣】 【答案】 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數(shù)組rand_arr的小數(shù)點后3位,。 【知識點:輸入和輸出】 【答案】 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數(shù)組a中打印的項數(shù)限制為最多6個元素,。 【知識點:輸入和輸出】 【答案】 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數(shù)組a而不中斷。 【知識點:輸入和輸出】 【答案】 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]
當前活動
我是 終身學(xué)習者“老馬”,,一個長期踐行“結(jié)伴式學(xué)習”理念的 中年大叔。 我崇尚分享,,渴望成長,,于2010年創(chuàng)立了“LSGO軟件技術(shù)團隊”,并加入了國內(nèi)著名的開源組織“Datawhale”,,也是“Dre@mtech”,、“智能機器人研究中心”和“大數(shù)據(jù)與哲學(xué)社會科學(xué)實驗室”的一員。 愿我們一起學(xué)習,,一起進步,,相互陪伴,共同成長,。
|