1. 实验内容
(1)numpy的导入。
(2)数组的基本创建、索引和切片。
(3)数组维度变换与重塑。
(4)数组排序。
(5)数组的组合和分拆。
2.目的要求
(1)学会numpy的导入。
(2)掌握数组的基本创建、索引和切片。
(3)学会数组维度变换与重塑的操作。
(4)掌握按照不同维度对数组的排序。
(5)掌握数组的组合与分拆。
3.实验方法手段及其条件
(1)数组的基本创建。
① 调用 numpy 的 array 函数创建一维数组a1,一维数组a2(指定dtype为float),二维数组a3以及三维数组a4,如下图所示:
import numpy as np
a1 = np.array([0, 1, 2, 3, 4, 5, 6, 7])
a2 = np.array([0, 1, 2, 3, 4, 5, 6, 7], dtype="float")
a3 = np.array([[0, 1, 2, 3],[4, 5, 6, 7]])
a4 = np.array([
[[0, 1], [2, 3]],
[[4, 5], [6, 7]],
])
② 定义一个结构化数据类型 xs_struc,包含字符串字段 id、name,整数字段 age及浮点字段 grade,并将这个 dtype 应用到 ndarray对象xs_rec,如下图所示:
xs_struc = np.dtype([('id', np.str_,4),
('name', np.str_,10),
('age', int),
('grade', float)
])
xs_struc
xs_rec = np.array([('1001', 'zhangsan', 20, 90.,)
,('1002', 'lisi', 21,88.),
('1000', 'wangwu', 20,91.)], dtype=xs_struc)
xs_rec
③ 使用np.arange()函数快速创建以下两个数组:第1个是含0-9数值的数组,第2个是从2开始,100以内,等差值为10的数组,如下图所示:
np.arange(0,10)
np.arange(2,100,10)
④ 创建形状为(3,4),dtype=int的全0数组,如下图所示:
np.zeros((3, 4), dtype=int)
(2)编写程序完成数组a1、a3和a4维度变换与重塑的操作。
a1 = np.array([0, 1, 2, 3, 4, 5, 6, 7])
a3 = np.array([[0, 1, 2, 3],[4, 5, 6, 7]])
a4 = np.array([
[[0, 1], [2, 3]],
[[4, 5], [6, 7]],
])
① 使用ndim查看各数组的维度,输出结果分别为1 2 3。
print(a1.ndim, a3.ndim, a4.ndim)
② 分别使用reshape()方法和resize()函数将a3转化为形状为(4,2)的数组b31和b32,输出结果如下图所示:
b31 = a3.reshape(4,2)
b31
b32 = np.resize(a3,(2,2,2))
b32
③ 分别使用ravel()函数、flatten()和reshape()方法将数组a4展平,输出结果如下图所示:
np.ravel(a4)
a4.flatten()
a4.reshape(1,1,-1)
(3)编写程序完成数组a3、a4和xs_rec的索引切片操作。
① 使用整数索引,获取数组a3中如图所示的元素,输出结果为[6]。
a3[1][2]
② 使用整数数组索引,获取数组a4中如图所示的元素,输出结果为[2 1]。
a4[[0],[1,0],[0,1]]
③ 使用布尔索引,获取数组a4中大于5的元素,输出结果为[6 7]。
a4[a4>5]
④ 使用字段名索引,获取数组xs_rec中lisi的学号、年龄和分数,输出结果为1002 21 88.0。
print(*xs_rec[xs_rec['name'] == 'lisi'][['id', 'age', 'grade']][0])
(4)对以下语句生成的数组a5分别按行和列排序,输出结果如下图所示:
a5=np.array([2,13,72,44,62,3,6,456,24,7,85,93,89,5]).reshape(7,2)
a5.sort(axis=1)
a5.sort(axis=0)
(5)对以下语句生成的两个二维数组按要求进行组合与分拆。
arr1 = np.arange(6).reshape((3, 2))
arr2 = np.array([[0, 1], [1, 0], [2, 1]])
① 对arr1和arr2完成水平拼接和垂直拼接,输出结果如下图所示:
np.hstack((arr1,arr2)) # 水平
np.vstack((arr1,arr2)) # 垂直
② 对arr1和arr2在0轴和1轴上分别完成拼接,输出结果如下图所示:
np.concatenate((arr1,arr2),axis=0)
np.concatenate((arr1,arr2),axis=1)
③ 对arr1完成水平分拆和垂直分拆,输出结果如下图所示:
np.hsplit(arr1,2)
np.vsplit(arr1,3)
④ 对arr1在0轴和1轴上分别完成分拆,输出结果如下图所示:
np.split(arr1,2,axis=1)
np.split(arr1,3,axis=0)