Python常用库:Numpy

本文转载自https://www.cnblogs.com/reaptomorrow-flydream/p/9173161.html,略有修改,感谢原博主整理分享

# Numpy简单创建数组

1 a = [1, 2, 3]
2 b = np.array(a)
3 c = np.array([[0, 1, 2],[3, 4, 5]], int)
4 print(b)
5 print(c)

1.创建数值为1的数组

Numpy.ones(参数 1:shape,数组的形状;参数 2:dtype, 数值类型)

1 array_one = np.ones([10, 10], dtype=np.int)
2 print(array_one)

2.创建数值为0的数组

Numpy.zeros(参数 1:shape,数组的形状;参数 2:dtype, 数值类型)

1 array_zero = np.zeros([3, 4], dtype=np.float)
2 print(array_zero)

3.创建指定数值的数组

Numpy.full(参数 1:shape,数组的形状; 参数 2:constant value,数组填充的常数值;参数 3:dtype, 数值类型,默认int)

  1 array_full = np.full([2, 3], 5, dtype=np.float)
  2 print(array_full)

4.创建单位矩阵

Numpy.eye(参数 1:N,方阵的维度)

1 array_eye = np.eye(5)
2 print(array_eye)

5.创建对角矩阵

Numpy.diag(参数1:v,主对角线数值,参数 2:k对角线元素):K = 0表示主对角线,k>0的值选择在主对角线之上的对角线中的元素,k<0的值选择在主对角线之下的对角线中的元素

1 array_diag = np.diag([10, 20, 30, 40],k=2)
2 print(array_diag)

 

# Numpy创建随机数组(np.random

 1.均匀分布

创建指定形状的数组,数值范围为[0,1):Numpy.random.rand(d0,d1,d2...dn)

1 array_rand = np.random.rand(3, 4)
2 print(array_rand)
3 print(array_rand.ndim)

创建指定范围内的一个数:Numpy.random.uniform(low, high, size=None)

1 array_uniform = np.random.uniform(0, 100, size=5)
2 print(array_uniform)

创建指定范围的一个整数:Numpy.random.randint(low, high, size=None)

1 array_int = np.random.randint(0, 100, size=3)
2 print(array_int)
3 print(array_int.size)

Numpy.arange(start, stop, step):创建一个秩为1的array,其中包含位于半开区间[start, stop)内并均匀分布的值,step表示两个相邻值之间的差。

Numpy.linspace(start, stop, N):创建N个在闭区间[start, stop]内均匀分布的值。

1 X = np.arange(1, 5, 2, dtype=np.int)
2 print(X)
3 y = np.linspace(1, 5, 3)
4 print(y)

2.正态分布

创建给定均值、标准差、维度的正态分布:Numpy.random.normal(loc, scale, size)

1 # 正态生成4行5列的二位数组
2 array_normal = np.random.normal(loc=1.75, scale=0.1, size=[4, 5])
3 print(array_normal)
4 print(array_normal.ndim)

 

# Numpy查看数组属性

数组元素个数:b.size

数组形状:b.shape (几行几列)

数组维度:b.ndim

数组元素类型:b.dtype

d2 = [[[1,2,3], [4,5,6]], [[2,3,4], [3,4,5]]] #3维数组
array2=np.array(d2)
print('size=',array2.size)
print('ndim=',array2.ndim)
print('stype=',array2.dtype)
print('shape=',array2.shape)
print(array2.shape[0])
print(array2.shape[1])
print(array2.shape[2])

 

# Numpy数组操作

1.数组的索引

array[start : end]

array[start:]

array[:end]

布尔型索引:array[array>10 & array<20]

1 # 截取第0至第2行,第2至第3列(从第0行第0列算起)???
2 after_array = array_normal[:3, 2:4]
3 print(after_array)

2.数组的复制

Numpy.copy(参数 1:数组):创建给定array的一个副本,还可当做方法用。

1 after_array = array_normal[:3, 2:4].copy()
2 copy_array = np.copy(array_normal[:, 2:4])

3.数组排序

Numpy.sort(a:数组axis=0/1kind:默认为快速排序,order:排序字段):np.sort()作为函数使用时,不更改被排序的原始array;array.sort()作为方法使用时,会对原始array修改为排序后数组array

1 # 整体排序
2 np.sort(array_normal)
3 # 竖直方向排序
4 np.sort(array_normal, axis=0)
5 # 水平方向排序
6 np.sort(array_normal, axis=1)

4.数组唯一元素

Numpy.unique(参数 1:a,数组;参数 2:return_index=True/False,新列表元素在旧列表中的位置;参数 3:return_inverse=True/False,旧列表元素在新列表中的位置;参数 4:return_counts,元素的数量;参数 5:axis=0/1,0表示行1表示列):查找array中的唯一元素。

1 print("提取唯一元素", np.unique(array_normal))
2 print("提取唯一元素", np.unique(array_normal, return_index=True))
3 print("提取唯一元素", np.unique(array_normal, return_counts=True))
4 print("提取唯一元素", np.unique(array_normal, return_index=True, return_inverse=True, axis=0))

 

# Numpy数组计算

1.条件运算

Numpy.where(condition, x, y):condition成立时,返回x;condition不成立时,返回y

1 score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
2 # 如果数值小于80,替换为0,如果大于等于80,替换为90
3 re_score = np.where(score < 80, 0, 90)
4 print(re_score)

2.统计运算

获取轴最大值:Numpy.amax(参数1:数组;参数2:axis=0/1,0表示纵轴,1表示横轴)

1 # 求整个矩阵的最大值
2 result = np.amax(score)
3 print(result)
4 # 求每一列的最大值
5 result = np.amax(score, axis=0)
6 print(result)
7 # 求每一行的最大值
8 result = np.amax(score, axis=1)
9 print(result)

获取轴最小值:Numpy.amin(参数1:数组;参数2:axis=0/1,0表示纵轴,1表示横轴)

1 # 求整个矩阵的最小值
2 result = np.amin(score)
3 print(result)
4 # 求每一列的最小值
5 result = np.amin(score, axis=0)
6 print(result)
7 # 求每一行的最小值
8 result = np.amin(score, axis=1)
9 print(result)

指定轴平均值:Numpy.mean(参数1:数组;参数2:axis=0/1,0表示纵轴,1表示横轴;参数3:dtype,输出数据类型)

1 # 求整个矩阵的平均值
2 result = np.mean(score, dtype=np.int)
3 print(result)
4 # 求每一列的平均值
5 result = np.mean(score, axis=0)
6 print(result)
7 # 求每一行的平均值
8 result = np.mean(score, axis=1)
9 print(result)

指定轴方差:Numpy.std(参数1:数组;参数2:axis=0/1,0表示纵轴,1表示横轴;参数3:dtype,输出数据类型)

1 # 求整个矩阵的方差
2 result = np.std(score)
3 print(result)
4 # 求每一列的方差
5 result = np.std(score, axis=0)
6 print(result)
7 # 求每一行的方差
8 result = np.std(score, axis=1)
9 print(result)

类似的,求和:Numpy.sum(),求中值:Numpy.median

3.数组运算

数组与的运算(加+、减-、乘*、除/、取整//、取余数%

 1 # 循环数组行和列,每一个数值都加5
 2 score[:, :] = score[:, :]+5
 3 print(score)
 4 # 循环数组行和列,每一个数值都减5
 5 score[:, :] = score[:, :]-5
 6 print(score)
 7 # 循环数组行和列,每一个数值都乘以5
 8 score[:, :] = score[:, :]*5
 9 print(score)
10 # 循环数组行和列,每一个数值都除以5
11 score[:, :] = score[:, :]/5
12 print(score)
13 # 循环数组行和列,每一个数值除以5取整
14 score[:, :] = score[:, :] // 5
15 print(score)
16 # 循环数组行和列,每一个数值除以5取余数
17 score[:, :] = score[:, :] % 5
18 print(score)

数组间运算(加、减、乘、除),前提是两个数组的shape一样

加:“+”或者np.add(a, b)      减:“-”或者np.subtract(a, b)  

乘:“*”或者np.multiply(a, b)  除:“/”或者np.divide(a, b)

1 c = score + score
2 d = score - score
3 e = score * score
4 # 分母数组保证每个数值不能为0
5 b = score / score

Numpy.intersect1d(参数 1:数组a;参数 2:数组b):查找两个数组中的相同元素

Numpy.setdiff1d(参数 1:数组a;参数 2:数组b):查找在数组a中不在数组b中的元素

Numpy.union1d(参数 1:数组a;参数 2:数组b):查找两个数组的并集元素

 

# Numpy矩阵运算(一种特殊的二维数组)

1.矩阵相乘

Numpy.dot(a, b):矩阵需满足(M行,N列)*(N行,Z列)=(M行,Z列)

1 st_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
2 # 平时成绩占40% 期末成绩占60%, 计算结果
3 q = np.array([[0.4], [0.6]])
4 result = np.dot(st_score, q)
5 print(result)

2.矩阵拼接

矩阵垂直拼接(前提两个两个矩阵列数相同,行数随意):Numpy.vstack(参数:tuple)

1 v1 = [[0, 1, 2, 3, 4, 5],
2       [6, 7, 8, 9, 10, 11]]
3 v2 = [[12, 13, 14, 15, 16, 17],
4       [18, 19, 20, 21, 22, 23],
5       [18, 19, 20, 21, 22, 23]]
6 result = np.vstack((v1, v2))
7 print(result)

矩阵水平拼接(前提两个两个矩阵行数相同,列数随意):Numpy.hstack(参数:tuple)

1 v1 = [[0, 1, 2, 3, 4, 5],
2       [6, 7, 8, 9, 10, 11]]
3 v2 = [[12, 13, 14, 15, 16, 17],
4       [18, 19, 20, 21, 22, 23]]
5 result = np.hstack((v1, v2))
6 print(result)

 矩阵删除:Numpy.delete(参数 1:array,数组;参数 2:elements,删除的对象;参数 3:axis=0/1,0行1列)

1 OriginalY = np.array([[1, 2, 3],
2                      [4, 5, 6],
3                      [7, 8, 9]])
4 print(np.delete(OriginalY, [0, 2])) #删除第0行的第0列和第2列元素,并重组为行向量
5 print(np.delete(OriginalY, [0, 2], axis=0)) #删除第0行和第2行元素
6 print(np.delete(OriginalY, [0, 2], axis=1)) #删除第0列和第2列元素

矩阵添加:Numpy.append(参数 1:array,数组;参数 2: elements,添加元素;参数 3: axis=0/1,0行1列)

1 OriginalY = np.array([[1, 2, 3],
2                      [4, 5, 6],
3                      [7, 8, 9]])
4 # 末尾添加元素并重组为行向量
5 print(np.append(OriginalY, [0, 2]))
6 # 最后一行添加一行
7 print(np.append(OriginalY, [[0, 2, 11]], axis=0))
8 # 最后一列添加一列(注意添加元素格式)
9 print(np.append(OriginalY, [[0], [2], [11]], axis=1))

矩阵插入:Numpy.insert(参数 1:array,数组;参数 2:index,插入位置索引;参数 3: elements,添加元素;参数 4: axis=0/1),相比Numpy.append可任意指定插入位置,更方便

1 OriginalY = np.array([[1, 2, 3],
2                      [4, 5, 6],
3                      [7, 8, 9]])
4 print(np.insert(OriginalY, 1, [11, 12, 10]))  #在第一行插入元素,并重组为行向量
5 print(np.insert(OriginalY, 1, [[11, 12, 10]], axis=0)) #在第一行后新的一行
6 # 在列索引1的位置插入(注意元素格式,跟添加格式不同)
7 print(np.insert(OriginalY, 1, [[11, 12, 10]], axis=1))  #在第一列后插入新的一列

 

# Numpy文件加载

np.loadtxt(fname, dtype, comments='#', delimiter=None, skiprows=0, usecols=None)

fname:读取的文件、文件名

dtype:数据类型

comments:注释

delimiter:分隔符,默认是空格

skiprows:跳过前几行读取,默认是0

usecols:读取哪些列,usecols=(1, 2, 5)读取第1,2,5列,默认所有列

 

其他链接

1.https://blog.csdn.net/alittlebirdsd/article/details/79194494

2.https://blog.csdn.net/a373595475/article/details/79580734

posted @ 2018-12-25 17:44  清风与归_G  阅读(401)  评论(0编辑  收藏  举报