NumPy模块的名称是由“Numerical Python”缩写而来,这个模块是一个运行速度非常快的数学模块,主要用于数组计算。下面一起来看看NumPy模块的基本用法。
1、数组的基础知识
NumPy模块的主要特点就是引入了数组的概念。因为一维数组和列表有相似之处,所以这里借助列表来讲解数组的基本概念。演示代码如下:
1 import numpy as np
2 a = [1, 2, 3, 4]
3 b = np.array([1, 2, 3, 4]) # 创建数组的一种方式,array就是数组的意思
4 print(a) #输出变量a的值
5 print(b) #输出变量b的值
6 print(type(a)) #输出变量a的数据类型
7 print(type(b)) #输出变量b的数据类型
第3行代码中的array()是NumPy模块中的函数,用于创建数组。运行结果如下:
1 [1, 2, 3, 4] # 列表的展现形式
2 [1 2 3 4] # 数组的展现形式
3 # 变量a的数据类型为列表
4 # 变量b的数据类型为数组
接着通过提取列表和数组中的元素来帮助大家进一步理解数组,演示代码如下:
1 [1, 2, 3, 4] # 列表的展现形式
2 [1 2 3 4] # 数组的展现形式
3 # 变量a的数据类型为列表
4 # 变量b的数据类型为数组
运行结果如下:
1 2 # 提取列表a的单个元素的结果2
2 # 提取数组b的单个元素的结果
3 [1, 2] # 列表a的切片结果,遵循“左闭右开”的规则
4 [1 2] # 数组b的切片结果,也遵循“左闭右开”的规则
从运行结果可以看出,列表和数组有着相似的元素索引机制,唯一的区别就是数组中的元素用空格分隔,而列表中的元素用逗号分隔。那么NumPy模块为什么不直接使用列表来组织数据,而要引入数组这一新的数据结构呢?原因有很多,这里主要讲两点。
第一,数组能很好地支持一些数学运算,而用列表来完成这些数学运算则较为麻烦。演示代码如下:
1 import numpy as np
2 a = [1, 2, 3, 4]
3 b = np.array([1, 2, 3, 4])
4 c = a * 2
5 d = b * 2
6 print(c)
7 print(d)
运行结果如下:
1 [1, 2, 3, 4, 1, 2, 3, 4]
2 [2 4 6 8]
可以看到,同样是做乘法运算,列表是把元素复制了一遍,而数组则是对每个元素都进行了乘法运算。
第二,数组可以存储多维数据,而列表通常只能存储一维数据。演示代码如下:
1 import numpy as np
2 e = [[1, 2], [3, 4], [5, 6]] # 大列表里嵌套小列表
3 f = np.array([[1, 2], [3, 4], [5, 6]]) # 创建二维数组的一种方式
4 print(e)
5 print(f)
运行结果如下:
1 [[1, 2], [3, 4], [5, 6]] # 列表e的打印输出结果
2 # 数组f的打印输出结果
3 [[1 2]
4 [3 4]
5 [5 6]]
可以看到,列表e虽然包含了3个小列表,但其结构是一维的。而数组f则是3行2列的二维结构,这也是之后要学习的pandas模块的核心概念之一,因为数据处理中经常用到二维数组,即二维的表格结构。
2、数组的创建
前面我们已经了解了创建数组的一种方式——np.array(列表)。这里简单总结一下,演示代码如下:
1 import numpy as np、
2 # 创建一维数组
3 a = np.array([1, 2, 3, 4])
4 # 创建二维数组
5 b = np.array([[1, 2], [3, 4], [5, 6]])
除此之外,还有一些常见的创建数组的方式。以一维数组为例,可以使用np.arange()函数来创建一维数组,该函数的括号里可以输入1~3个参数,会得到不同的效果。演示代码如下:
1 import numpy as np
2 # 1个参数:起点取默认值0,参数值为终点,步长取默认值1,左闭右开
3 x = np.arange(5)
4 # 2个参数:第1个参数为起点,第2个参数为终点,步长取默认值1,左闭右开
5 y = np.arange(5, 10)
6 # 3个参数:第1个参数为起点,第2个参数为终点,第3个参数为步长,左闭右开
7 z = np.arange(5, 10, 2)
8 print(x)
9 print(y)
10 print(z)
运行结果如下:
1 [0 1 2 3 4]
2 [5 6 7 8 9]
3 [5 7 9]
还可以用np.random中的函数创建随机一维数组。例如,用np.random.randn(3)创建一个一维数组,其中包含服从正态分布(均值为0、标准差为1的分布)的3个随机数。演示代码如下:
1 import numpy as np
2 c = np.random.randn(3)
3 print(c)
运行结果如下:
1 [-0.59243327 0.53587119 0.15330862]
至于二维数组,可以利用创建一维数组的np.arange()函数和reshape()函数来创建。例如,将包含0~11这12个整数的一维数组转换成3行4列的二维数组,演示代码如下:
1 import numpy as np
2 d = np.arange(12).reshape(3, 4)
3 print(d)
运行结果如下:
1 [[ 0 1 2 3]
2 [ 4 5 6 7]
3 [ 8 9 10 11]]
这里再简单介绍一种创建随机整数二维数组的方法,演示代码如下:
1 import numpy as np
2 e = np.random.randint(0, 10, (4, 4))
3 print(e)
第2行代码中的np.random.randint()函数用来创建随机整数,括号里第1个参数0为起始数,第2个参数10为终止数,第3个参数(4,4)则表示创建一个4行4列的二维数组。运行结果如下:
1 [[4 1 6 3]
2 [3 0 4 8]
3 [7 8 1 8]
4 [4 6 3 6]]