Numpy入門教程:練習作業01

序言

什麼是 NumPy 呢?

NumPy 這個詞來源於兩個單詞 – NumericalPython。其是一個功能強大的 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”、“智能機器人研究中心”和“大數據與哲學社會科學實驗室”的一員。

願我們一起學習,一起進步,相互陪伴,共同成長。

後臺回覆「搜搜搜」,隨機獲取電子資源!
歡迎關注,請掃描二維碼:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章