NumPy模块
1.1 什么是NumPy?
NumPy(Numerical Python) 是科学计算基础库,它提供了大量科学计算相关功能。比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,NumPy支持向量处理ndarray对象,提高程序运行速度。
1.2 NumPy的安装
安装NumPy最简单的方法就是使用pip工具,具体安装步骤如下:
1.2.1 按住 Win + R 键,输入cmd,然后回车
1.2.2 输入命令
- pip install numpy
注意:这种安装方式速度可能会比较慢,所以我们这里建议换源安装
1. 使用清华源进行pip安装
命令: pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple
示例: pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
像上图出现Successfully 就说明我们的NumPy安装成功啦
【示例1】arange函数测试环境安装
# 导入numpy模块, import numpy as np # as是取别名 a = np.arange(10) # 调用numpy模块中的arange函数,创建一个数组 print(a) print(type(a)) # 查看a的类型
下面是运行结果:
[0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'> # ndarray类型
【示例2】对列表中的元素开平方
# 导入numpy模块 import numpy as np # 创建一个数组 b = [3, 6, 9] # 对数组中的每一个数进行开平方 print(np.sqrt(b))
下面是运行结果:
[1.73205081 2.44948974 3. ]
1.3 数组的创建
1.3.1 array创建
NumPy模块中的array函数可以生成多维数组。例如,如果要生成一个二维数组,需要向array函数传递一个列表类型的参数。每一个列表元素是一堆的ndarray类型数组,作为二维数组的行。另外,通过ndarray类的shape属性可以获得数组每一堆的元素个数(元组形式),也可以通过shape[n]形式获得每一堆的元素个数,其中n是维度,从0开始。
语法格式如下:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
下面是array函数的参数名称及其作用描述:
【示例1】使用array函数创建数组
import numpy as np a = np.array([1, 2, 3]) # 创建一维数组 b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 创建二维数组 c = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]) # 创建三维数组 print(a) print(b) print(c) print(type(a), type(b), type(c))
运行结果如下:
[1 2 3] [[1 2 3] [4 5 6] [7 8 9]] [[[1 2 3] [4 5 6] [7 8 9]]] <class 'numpy.ndarray'> <class 'numpy.ndarray'> <class 'numpy.ndarray'>
由上可知:使用array函数创建的数组都是ndarray对象
【示例2】array函数中dtype的使用
a = np.array([4, 5, 6], dtype=float) b = np.array([4, 5, 6], dtype=complex) print(a, type(a)) print(b, type(b))
运行结果如下:
[4. 5. 6.] <class 'numpy.ndarray'> [4.+0.j 5.+0.j 6.+0.j] <class 'numpy.ndarray'>
由上可知:array函数中dtype参数可以设置创建数组内的元素类型
【示例3】array函数中ndmin的使用
a = np.array([4, 5, 6], ndmin=3) print(a)
[[[4 5 6]]]
由上可知:array函数中ndmin参数可以设置创建数组的最小维度
1.3.2 arange创建
使用arange函数创建数值范围并返回ndarray对象,函数格式如下:
numpy.arange(start, stop, step, dtype)
下面是arange函数的参数名称及其作用描述:
【示例】使用arange函数创建数组
# 与range函数类似,括号内的范围是左闭右开 a = np.arange(11) # 未设置起始值时,默认从0开始 b = np.arange(1, 11) # 设置起始值和终止值,左闭右开 c = np.arange(1, 11, 2) # 设置步长,默认值为1 d = np.arange(1, 11, 2, dtype=float) # 设置数组元素的类型,这里设置为浮点型 print(a) print(b) print(c) print(d)
运行结果如下:
[ 0 1 2 3 4 5 6 7 8 9 10] [ 1 2 3 4 5 6 7 8 9 10] [1 3 5 7 9] [1. 3. 5. 7. 9.]
1.3.3 随机数创建
使用numpy.random.random(size=None),该方法返回[0.0, 1.0)范围的随机数。
格式如下:
numpy.random.random(size=None)
【示例1】使用numpy.random.random(size=None)创建一维数组
# size表示要生成的数组大小,size=5就表示包含 5 个元素的一维数组 a = np.random.random(size=5) print(a)
运行结果如下:
[0.84174708 0.60109444 0.93239501 0.36488593 0.24012724]
由运行结果可知:一维数组中的每个元素都是[0.0, 1.0)之间的随机数
【示例2】使用numpy.random.random(size=None)创建二维数组
# 函数的参数 size=(3, 4) 表示要生成的数组的形状为3行4列,即包含3个子数组,每个子数组包含4个元素。 a = np.random.random(size=(3, 4)) print(a)
运行结果如下:
[[0.32989944 0.76740016 0.10208365 0.01924679] [0.20753174 0.09438332 0.44283362 0.41200616] [0.89764502 0.62156786 0.06232488 0.40479654]]
【示例3】使用numpy.random.random(size=None)创建三维数组
# 由2个平面组成的三维数组。每个平面有3行4列的元素。 a = np.random.random(size=(2, 3, 4)) print(a)
运行结果如下:
[[[0.60235703 0.83229013 0.55511265 0.84317137] [0.26768256 0.98907851 0.97608121 0.33226806] [0.94246877 0.71305221 0.72211643 0.21610183]] [[0.61838121 0.28558197 0.24185245 0.09372992] [0.78479353 0.9609283 0.11742715 0.46640449] [0.04459701 0.07881661 0.32281088 0.54882584]]]
1.3.4 随机整数创建
语法格式:
numpy.random.randint(low, high=None, size=None, dtype=int)
下面是randint函数的参数名称及其作用描述:
【示例1】生成0到5的随机整数一维数组
# 生成一个长度为10的一维随机整数数组,其元素的取值范围在[0, 6)之间 random_int = np.random.randint(6, size=10) print(random_int)
运行结果如下:
[1 3 5 5 5 3 4 5 3 4]
【示例2】生成0到5的随机整数二维数组
# 生成一个大小为3x4的二维随机整数数组,其中每个元素的取值范围在[0, 6)之间 random_int = np.random.randint(0, 6, size=(3, 4)) print(random_int)
运行结果如下:
[[3 5 1 5] [1 5 4 1] [3 1 2 2]]
【示例3】生成0到5的随机整数三维数组并查看类型
# 生成一个大小为2x4x3的三维随机整数数组,其中每个元素的取值范围在[0, 6)之间 random_int = np.random.randint(0, 6, size=(2, 4, 3), dtype=int64) # 默认的dtype为int32,这里修改为int64,一般使用默认的,不对其进行设置 print(random_int) print(random_int.dtype)
运行结果如下:
[[[2 1 2] [2 1 2] [2 1 3] [1 2 5]] [[3 0 3] [1 4 1] [5 1 5] [1 5 4]]] int64
1.3.5 其他方式创建
ndarray数组除了可以使用底层ndarray构造器来创建外,也可以通过以下几种方式来创建。
1. zeros创建指定大小的数组
注意:数组元素以0来填充
语法格式:
numpy.zeros(shape, dtype=float, order='C')
下面是arange函数的参数名称及其作用描述:
【示例】使用zeros创建数组
# 创建一维数组 a = np.zeros(5) # 指定类型 a1 = np.zeros((5,), dtype=int) # dtype指定为整型 # 创建二维数组 b = np.zeros((3, 4)) print(a) print(a1) print(b)
运行结果如下:
[0. 0. 0. 0. 0.] [0 0 0 0 0] [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]
2. ones创建指定形状的数组
注意:数组元素以1来填充
语法格式:
numpy.ones(shape, dtype=float, order='C')
参数与zeros一样。
【示例】使用zeros创建数组
# 创建一维数组 a = np.ones(5) # 指定类型 a1 = np.ones((5,), dtype=int) # dtype指定为整型 # 创建二维数组 b = np.ones((3, 4)) print(a) print(a1) print(b)
运行结果如下:
[1. 1. 1. 1. 1.] [1 1 1 1 1] [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
3. empty创建指定形状、类型且未初始化的数组
里面的元素的值都是之前内存的值
语法格式:
numpy.empty(shape, dtype=float, order='C')
参数与zeros和ones一样。
【示例】使用empty创建数组
# 创建一维数组 a = np.empty(5) # 创建二维数组 b = np.empty((3, 4)) print(a) print(b)
运行结果如下:
[0. 0.25 0.5 0.75 1. ] [[0. 0. 1. 1.] [1. 1. 1. 1.] [1. 0. 0. 1.]]
4. linspace创建一维数组
注意:数组是由一个等差数列构成的
语法格式:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
下面是linspace函数的参数名称及其作用描述:
【示例】使用linspace创建数组
# linspace本身只能创建一维数组,但可以通过reshape()函数改变数组的形状,从而将其转换为多维数组。 a = np.linspace(1, 10, 10) # linspace的参数使用 b = np.linspace(5, 20, 5, endpoint=False) # 数列中是否包含结束值,默认是True,这里的结束值为20 print(a) print(b)
运行结果如下:
[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] [ 5. 8. 11. 14. 17.]
5. logspace创建一维数组
注意:数组是由一个等比数列构成的
语法格式:
numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)
下面是linspace函数的参数名称及其作用描述:
【示例】使用logspace创建数组
# logspace本身只能创建一维数组,但可以通过reshape()函数改变数组的形状,从而将其转换为多维数组。 # 参数base是对数的底数,默认为10.0,这里base修改成2,就是二的零次方到二的九次方,共十个数 a = np.logspace(0, 9, 10, base=2) print(a)
运行结果如下:
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
以上就是利用NumPy模块创建数组的方法啦。
1.4 NunPy创建正态分布
1.4.1 什么是正态分布?
- 正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的方差,所以正态分布记作N(μ,σ )。
正态分布的应用
生活、生产与科学实验中很多随机变量的概率分布都可以近似地用正态分布来描述。
正态分布特点
μ决定位置,标准差σ决定分布的幅度。当μ=0,σ=1时的正态分布是标准正态分布。
标准差的由来
是在概率论和统计方差衡量一组数据时离散程度的度量
其中M为平均值,n为数据总个数,σ为标准差,σ^2可以理解一个整体为方差
意义:
- 衡量数据集中离散程度的统计量
- 评估数据的稳定性与可靠性
- 判断异常值
- 比较数据集的差异
1.4.2 正态分布的创建
1 使用np.random.randn(d0,d1.…,dn)
功能:返回一个或一组样本,具有标准正态分布(期望为0,方差为1)。
其中dn表示维度,返回值为指定维度的array。
【示例1】创建标准正态分布
import numpy as np # 导入numpy模块,并取别名为np a = np.random.randn(4) # 创建一维正态分布,4个样本 b = np.random.randn(2, 3) # 创建二维正态分布,2行3列 c = np.random.randn(2, 3, 4) # 创建三维正态分布,两个3行4列 print(a) print(b) print(c)
运行结果如下:
[-0.16930696 0.06248915 1.14694234 -0.67915553] [[ 0.3593049 1.03306886 1.22526589] [ 0.61003873 -0.27869365 -1.85060132]] [[[-1.27024862 -0.77071883 0.38358392 -0.47510941] [ 0.6838695 -1.17981501 -0.02296724 0.49406554] [ 1.3592937 -0.44472263 -1.06859185 0.45612865]] [[ 0.97739867 1.65453604 1.28613116 0.38836202] [ 0.25522913 0.06706893 0.02789549 -0.2660675 ] [ 0.30396508 0.92458245 0.4289461 0.47960441]]]
【示例2】创建指定方差和期望的正态分布
这里使用np.random.normal()创建指定方差和期望的正态分布
语法格式:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
下面是参数说明:
import numpy as np # 导入numpy模块,并取别名为np a = np.random.normal(size=5) # 默认的期望loc=0.0,方差scale=1.0 b = np.random.normal(loc=2, scale=3, size=(2, 3)) # 指定期望和方差,创建一个二维的正态分布(2行3列) print(a) print(b)
运行结果如下:
[-1.35319011 -0.68628191 0.64808923 -1.14593456 0.02243171] [[ 5.58788096 6.42265409 1.89002242] [-3.04814133 -4.60432636 0.37355701]]
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
https://developer.aliyun.com/article/1537790