1实验步骤
1.1使用NumPy库创建数组
新建一个文件c5_ex1.py并输入以下代码,探索NumPy中创建数组的方法,并总结。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#导入NumPy包 import numpy as np #创建一个整数数组[1, 4, 2, 5, 3] arr_1 = np.array([1, 4, 2, 5, 3]) print(arr_1) #创建一个长度为10的数组,数组数值都为0 arr_2 = np.zeros(10, dtype=int) print(arr_2) #创建一个3*5的浮点型数组,数组的值都是1 arr_3 = np.ones((3, 5), dtype=float) print(arr_3) #创建一个3*5的浮点型数组,数组的值都是3.14 arr_4 = np.full((3, 5), 3.14) print(arr_4) #创建一个数组,从0开始到20结束,步长为2 arr_5 = np.arange(0, 20, 2) print(arr_5) #创建一个5个元素的数组,这5个数均匀地分配到0~1之间 arr_6 = np.linspace(0, 1, 5) print(arr_6) #创建一个3*3的数组,数组元素的值在0-1之间随机分布 arr_7 = np.random.random((3, 3)) print(arr_7) #创建一个3*3的整型数组,数组元素的值在区间[0, 10)随机分布 arr_8 = np.random.randint(0, 10, (3, 3)) print(arr_8) |
注意,以上例子中,特别需要掌握如何建立一个元素值随机的数组!
1.2 NumPy创建多维数组
请输入如下代码,分别生成一个一维数组,二维数组和三维数组。
27 28 29 30 31 32 33 34 35 36 37 38 |
#创建一维数组 x1 = np.random.randint(10, size=6) print("打印一维数组:") print(x1) #创建二维数组 x2 = np.random.randint(10, size=(3, 4)) print("打印二维数组:") print(x2) #创建三维数组 x3 = np.random.randint(10, size=(3, 4, 5)) print("打印三维数组:") print(x3) |
1.3 NumPy数组的属性
一个数组中,通常具有以下属性:数组的维度,每个维度的大小,数组的数据类型,每个元素的大小等等。请新建一个名为c5_ex2的文件,输入以下代码,探索数组属性的具体意义。
1 2 3 4 5 6 7 8 |
import numpy as np #创建一个三维数组 arr_1 = np.random.randint(10, size=(3, 4, 5)) #探索属性 print("arr_1的ndim属性:", arr_1.ndim) print("arr_1的shape属性:", arr_1.shape) print("arr_1的size属性:", arr_1.size) print("arr_1的dtype属性: ", arr_1.dtype) |
请将探索结果写入下表
属性 |
意义 |
ndarray.ndim |
|
ndarray.shape |
|
ndarray.size |
|
ndarray.dtype |
|
1.4 数组的索引
数组的索引规则与列表类似,在一维数组中,可以使用中括号指定索引。在多维数组中,可以用逗号分隔。根据文件c5_ex1.py的数组x1,x2中元素位置,来填写下列表格。
下面的多维数组的例子,请填写下列空白:
数组位置 |
值 |
数组x1的第3个元素 |
|
数组x2的第1行第2列的元素 |
|
1.5 探索NumPy数组的通用函数
NumPy中还有一些通用函数用于科学计算,如下表所示。请搜索资料并填写各个函数的作用下表:
通用函数 |
作用 |
np.add |
|
np.multiply |
|
np.power |
|
np.mod |
|
np.absolute |
|
np.sin |
|
np.exp |
|
np.log |
|
此外在NumPy中,也有专用的用于统计的函数。例如求一个数组中的最大值等等。请在Python解释器中输入以下代码:
In [1]: import numpy as np In [2]: big_array = np.random.rand(1000000) In [3]: %timeit sum(big_array) In [4]: %timeit np.sum(big_array) |
对比第3和4两个语句的执行时间,并记录观察到的结果。基于观察结果,试解释NumPy中为什么使用通用函数,而不是直接使用运算符的原因?
2练习题
2.1 NumPy中,reshape()函数的作用是重塑数组的形状,例如代码A = np.arange(25).reshape(5,5)会生成一个5*5的矩阵,如下所示:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
请编写代码,使矩阵中的第一行与第二行交换位置
(未完待续,引入random包和蒙特卡洛方法计算\Pi,考虑加入最小二乘法Python实现)