序言什么是 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 中提取所有奇数。 【知识点:搜索】 【答案】 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。 【知识点:搜索】 【答案】 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。 【知识点:搜索】 【答案】 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维数组。 【知识点:数组的操作】 【答案】 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])
【知识点:集合操作】 【答案】 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])
【知识点:逻辑函数】 【答案】 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。 【知识点:索引与切片】 【答案】 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行。 【知识点:索引与切片】 【答案】 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的行。 【知识点:索引与切片】 【答案】 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的列。 【知识点:索引与切片】 【答案】 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位。 【知识点:输入和输出】 【答案】 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个元素。 【知识点:输入和输出】 【答案】 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而不中断。 【知识点:输入和输出】 【答案】 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”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。 愿我们一起学习,一起进步,相互陪伴,共同成长。
|