NumPy
NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy运算效率极好,是大量机器学习框架的基础库。
使用numpy库中的函数前,需使用import关键字引入numpy库,本博客采用以下方式引入numpy:
import numpy as np
引入numpy库,并重命名为np,通过np.使用numpy中的函数。
本篇主要介绍numpy中的数组操作:
数组:所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。(参考:https://baike.baidu.com/item/数组/3794097?fr=aladdin)
使用numpy下的array方法创建数组
①列表转换数组
#导入numpy包
import numpy as np
# 创建简单的列表
a = [1, 2, 3, 4]
# 将列表转换为数组
b = np.array(a)
print(b)
#array([1, 2, 3, 4])
②直接创建数组
import numpy as np
c=np.array([[1,2,3],[4,5,6]]) # 创建2*3维数组
print(c)
''' array([[1,2,3],
[4,5,6]])
'''
.size :元素个数
.shape:数组维数信息
.ndim:维数
.dtype :数组元素类型
.itemsize:每个元素所占用的字节数目,创建数组时,即可指定元素类型,有如下常用类型:
np.int16、 np.int32、 np.float32、 np.float64
如:
c=np.array([[1,2,3],[4,5,6]],dtype=np.int16) # 创建2*3维数组 array([[1,2,3],[4,5,6]])
例:
import numpy as np
# 创建简单的列表
a = [1, 2, 3, 4]
# 将列表转换为数组
b = np.array(a) # b:array([1, 2, 3, 4])
b.shape # 维数信息:(4,)
b.dtype.name # 'int32'
b.size # 元素个数:3
b.itemsize #每个元素所占用的字节数目:4
b.ndim #维数 1维
c=np.array([[1,2,3],[4,5,6]],dtype=np.int16) # 创建2*3维数组 array([[1,2,3],[4,5,6]])
c.shape # 维数信息:2,3)表示该数组为2 X 3维
c.size # 元素个数:6
c.itemsize # 每个元素所占用的字节数目:2
c.ndim # 维数:2
常用的多维数组类型:
zeros、ones、empty、arange、linspace、eye、random.rand、random.normal
zeros:创建数组元素全为0的数组
np.zeros(shape,dtype = None)
shape:生成数组的维度
dtype:输出数组的类型
a1 = np.zeros((3,4), dtype=np.int16) # 创建3*4全零二维数组
'''
输出:
array([[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
'''
a1.dtype.name # 元素类型:'int16'
a1.size # 元素个数:12
a1.itemsize # 每个元素所占用的字节个数:8
ones::建数组元素全为1的数组
np.ones(shape,dtype = None)
shape:生成数组的维度
dtype:输出数组的类型
a2 = np.ones((2,3,4), dtype=np.int16) # 创建2*3*4全1三维数组
a2 = np.ones((2,3,4), dtype='int16') # 创建2*3*4全1三维数组
'''
输出:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]], dtype=int16)'''
empty:创建未初始化的二维数组,数组中包含的数字全为无意义的数值
a3 = np.empty((2,3)) # 创建2*3的未初始化二维数组,包含的均是无意义的数值
arange:
arange(start, stop, step, dtype = None)在给定间隔内返回均匀间隔的值。
start —— 开始位置,数字,可选项,默认起始值为0
stop —— 停止位置,数字
step —— 步长,数字,可选项, 默认步长为1,如果指定了step,则还必须给出start。
dtype —— 输出数组的类型。 如果未给出dtype,则从其他输入参数推断数据类型。
例:
a4 = np.arange(10,30,5) # 初始值10,结束值:30(不包含),步长:5
'''
输出:array([10, 15, 20, 25])
'''
a5 = np.arange(0,2,0.3) # 初始值0,结束值:2(不包含),步长:0.2
'''
输出:array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
'''
a6 = np.arange(6)#初始值默认0 步长默认1
'''
输出:
array([0, 1, 2, 3, 4, 5])
'''
linspace:
linspace(start, stop, nums, dtype = None),生成在指定间隔内,指定元素个数的等差数列数组。
start —— 开始位置,数字
stop —— 停止位置,数字
nums—— 元素个数,数字。
dtype —— 输出数组的类型。 如果未给出dtype,则从其他输入参数推断数据类型。
例:
np.linspace(0, 2, 9) # 初始值0,结束值:2(包含),元素个数:9
'''
输出:
array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
'''
eye
eye(n):生成n*n的单位数组
np.eye(2)
'''
array([[1., 0.],
[0., 1.]])
'''
random.rand
random.normal
补充:
np.random.uniform(0, 100)#创建指定范围内的一个数
np.random.randint(0, 100)#创建指定范围内的一个整数
random.rand(shape):创建指定形状的数组(范围在0至1之间)
shape:数组维数
np.random.random((3, 3))
#输出3*3数组,数组元素值在0~1之间
random.normal(loc,scale,size) :生成给定均值/标准差/维度的正态分布数组
参数loc(float):正态分布的均值,
参数scale(float):正态分布的标准差。
参数size(int 或者整数元组):输出的值赋在shape里,默认为None
np.random.normal(1.75, 0.1, (2, 3))
补充:
使用reshape方法改变数组维度
a = np.arange(6)#初始值默认0 步长默认1
'''
输出:
array([0, 1, 2, 3, 4, 5])
'''
print(a.reshape(2,3))
'''
[[0 1 2]
[3 4 5]]
'''
b = np.arange(12).reshape(4,3)
'''
输出:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
'''
c = np.arange(24).reshape(2,3,4)
'''
输出:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
'''
'''