实验二:掌握Numpy基本操作
【实验内容】
伴随着我们步入机器学习的大门的脚步声,第一关的Boss出现在我们面前,它给我们带来了一堆杂乱的数据,我们需要对其进行处理,完成下文实验内容,尽快进入下一关!
1、下载安装jupyter notebook。
2、安装Numpy科学计算库。
3、掌握Numpy中的数组创建、切片索引、广播机制、基本运算、函数使用。
【实验目的】
1、掌握jupyter notebook的基本使用。
2、掌握numpy相关知识。
【实验步骤】
步骤1:安装jupyter notebook。
步骤2:安装numpy。
步骤3:使用numpy创建数组。
步骤4:掌握numpy切片操作。
步骤5:掌握numpy广播机制。
步骤6:掌握numpy常用函数。
步骤1:安装jupyter notebook。
注意1:请直接按默认路径创建项目,后续所需数据已经配置完成。
注意2:本系统已经装配好后续实验所需环境,您可以直接使用,请大展身手吧!
#在终端输入。 pip install notebook #如果速度较慢可以挂载镜像源,如下: pip install notebook -i http://pypi.mirrors.ustc.edu.cn/simple/ #测试使用jupyter notebook ,直接在终端输入,空格隔开。 Jupyter noteook
进入jupyter notebook后我们可以创建一个ipynb文件,如下图:
步骤2:安装numpy。
#方法一,直接在终端输入。 pip install numpy #方法二,在jupyter notebook中输入。 !pip install numpy
准备工作已经做完下面就可以写代码了!
步骤3:使用numpy创建数组。
#导入numpy,通常我们把它重命名为np使用。 import numpy as np #创建一维数组。 np.array([1,2,3])
输出:array([1, 2, 3])
#创建一个3*3的数组,并定义其数据类型为float32。 a = np.array([ [1,2,3], [4,5,6], [7,8,9], ],dtype=np.float32) a
输出:array([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.], dtype=float32])
#查看创建的数组的维度、形状、尺寸、类型。 print('数组a的维度为:',a.ndim) print('数组a的形状为:',a.shape) print('数组a的尺寸为:',a.size) print('数组a的类型为:',a.dtype)
输出: 数组a的维度为: 2
数组a的形状为: (1, 3)
数组a的尺寸为: 3
数组a的类型为: float32
#创建全0和全1数组,其中shape可以指定其形状(行,列)。 np.zeros(shape=(2,4))
输出:array([[0., 0., 0., 0.],
[0., 0., 0., 0.]])
np.ones(shape=(4,2))
输出:array([[1., 1.],
[1., 1.],
[1., 1.],
[1., 1.]])
#创建连续值的数组,前者表示[1,9),后者表示在前者的基础上隔2个数取一位。 np.arange(1,9)
输出:array([1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(1,9,2)
输出:array([1, 3, 5, 7])
#创建随机数。 np.random.rand(2,2)
输出:array([[0.6590129 , 0.68697198],
[0.1630133 , 0.59577548]])
np.random.randint(-100,100,size=(2,2))
输出:array([[ 50, -100],
[ 83, 47]])
步骤4:掌握numpy切片操作。
#切片是以索引来拆分,在列表中索引都是以0开始计算,倘若冒号左右没有值则代表到边界位。 a = np.arange(1,11) print('a为: ', a) print('a[-3:]为: ', a[-3:]) #取出最后3位 print('a[2:6]为: ', a[2:6])
输出:a为: [ 1 2 3 4 5 6 7 8 9 10]
a[-3:]为: [ 8 9 10]
a[2:6]为: [3 4 5 6]
#隔一定的步长取值。 print(a[:2]) print(a[::2]) #每隔2个数开始取值。
输出:[1 2]
[1 3 5 7 9]
#多维数组中的切片操作。 a = np.array([ [1,2,3,4], [5,6,7,8], [9,0,1,2], ]) a
输出:array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 0, 1, 2]])
a[:,:-1] #取出前3列数据。
输出:array([[1, 2, 3],
[5, 6, 7],
[9, 0, 1]])
a[1,1] #取出位于(1,1)位置的数。
输出:6
步骤5:掌握numpy广播机制。
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长。
#同纬度的a和b相加。 a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) b = np.array([[0,1,2], [0,1,2], [0,1,2], [0,1,2]]) print(a + b)
输出:[[ 0 1 2]
[10 11 12]
[20 21 22]
[30 31 32]]
#不同维度的a和b相加。 a = np.array([[ 0, 0, 0], [10,10,10], [20,20,20], [30,30,30]]) b = np.array([0,1,2]) print(a + b)
输出:[[ 0 1 2]
[10 11 12]
[20 21 22]
[30 31 32]]
其计算过程如下:
步骤6:掌握numpy常用函数。
#大小写转换函数。 print(np.char.title('wei zhong')) #字符串的第一个单词大写。 print(np.char.lower('WEI ZHONG')) #每个元素都转换为小写。 print(np.char.upper('wei zhong')) #每个元素都转换为大写。
输出:Wei Zhong
wei zhong
WEI ZHONG
#正弦、余弦、正切运算(sin()、cos()、tan())。 a = np.array([0,30,45,60,90]) print ('各角度的正弦值:', np.sin(a*np.pi/180)) #np.pi/180 是转化为弧度。 print ('各角度的余弦值:', np.cos(a*np.pi/180)) print ('各角度的正切值:', np.tan(a*np.pi/180))
输出:各角度的正弦值: [0. 0.5 0.70710678 0.8660254 1. ]
各角度的余弦值: [1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01
6.12323400e-17]
各角度的正切值: [0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16]
#数组间的加减乘除。 a = np.arange(4).reshape(2,2) #定义一个3*3的数组 。 print ('第一个数组:n', a) b = np.array([1, 2]) print ('第二个数组:n', b) print ('两个数组相加:n', np.add(a,b)) print ('两个数组相减:n', np.subtract(a,b)) print ('两个数组相乘:n', np.multiply(a,b)) print ('两个数组相除:n', np.divide(a,b))
输出:第一个数组:
[[0 1]
[2 3]]
第二个数组:
[1 2]
两个数组相加:
[[1 3]
[3 5]]
两个数组相减:
[[-1 -1]
[ 1 1]]
两个数组相乘:
[[0 2]
[2 6]]
两个数组相除:
[[0. 0.5]
[2. 1.5]]
#计算数组的均值、最大值、最小值、标准差。 a = np.arange(9).reshape(3,3) print(a) print('数组的均值为',a.mean()) print('数组的最大值为', a.max()) print('数组的最小值为', a.min()) print('数组的标准差为', a.std())
输出:
[[0 1 2]
[3 4 5]
[6 7 8]]
数组的均值为 4.0
数组的最大值为 8
数组的最小值为 0
数组的标准差为 2.581988897471611
恭喜你已完成本章实验内容!!!