1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python3:numpy的简单使用4(矩阵间的操作 合并数组 分割数组 读取文件操作)

Python3:numpy的简单使用4(矩阵间的操作 合并数组 分割数组 读取文件操作)

时间:2021-10-12 04:26:53

相关推荐

Python3:numpy的简单使用4(矩阵间的操作 合并数组 分割数组 读取文件操作)

声明

当前的知识用于本人复习使用,当前的内容涉及到,numpy中矩阵间的操作,数组间的合并以及分割,还有使用numpy读取txt格式的文件并执行数据操作

1.数组间的合并与分割操作

# 合并以及分割# 假设具有这样一段数据,三家店的营业额marks = [[110, 115, 112],[108, 109, 100],[119, 120, 130]]# 以上存在这样的数据(这是三家店三天的营业额),现在需要添加剩余两天的数据(也就是显示一周的数据)two_days_marks = [[100, 120],[115, 100],[100, 110]]# 现在显示三家店五天的营业额import numpy as np# 使用hstack合并,为水平方向的合并操作five_days_marks = np.hstack([marks, two_days_marks])print(five_days_marks)print()# 现在又开了两家店 需要数据5家店五天的营业额two_marks = [[100, 101, 102, 103, 104],[105, 106, 107, 108, 109]]five_marks = np.vstack([five_days_marks, two_marks])print(five_marks)# 使用vstack合并,为垂直方向的合并# 输出总和five_matrix = np.matrix(five_marks)s = np.matrix([[1], [1], [1], [1], [1]])print(five_matrix * s)# 使用 当前的concatenate合并a = [[1, 2, 3],[4, 5, 6]]b = [[7, 8, 9]]c = [[4, 5, 6], [7, 8, 9]]result = np.concatenate([a, b], axis=0) # 0表示y轴的合并print(result)result = np.concatenate([a, c], axis=1) # 1 表示x轴的合并print(result)print("开始执行分割数据的操作")# 使用分割np_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])print(np.split(np_array, 3)) # 发现按照3等分进行分割,分成了三组数据# print(np.split(np_array,6)) # 数组拆分不会导致等分,说明这个分割就是等分的分割操作,如果不能分割成相同的等分就会报错print(np.split(np_array, [2, 4, 6, 8])) # 按照指定的下标的方式分割当前的数据

结果:

总结:

1.在使用当前合并操作的时候需要指定是水平方向还是垂直方向的合并

2.使用np.hstack()实现水平方向的合并,使用np.vstack()方法实现垂直方向的合并,还可以使用np.concatenate()方法并指定axis方式合并

3.分割数组使用np.split方法,可以指定当前的参数,指定分割的段数,和按照当前的下标的方式进行分割

2.矩阵间的操作(乘法操作)

矩阵就是一个维度为2的数组,并且水平的数据都相同,就像一个矩形一样的数据

## 当前的矩阵间的操作# 1. 矩阵间的乘法操作为(假设举证a=(2,3)表示当前的形状为2行3列的数据,b=(3,2)表示当前的形状为3行2列的数据),当前的乘法操作结果为:2,2两行两列的数据a = [[1, 2, 3], [4, 5, 6]]b = [[1, 2],[3, 4],[5, 6]]# 上述的数据中的数据就是一个(2,3)和(3,2),这两个矩阵相乘的结果为:2,2# 现在开始矩阵间的乘法操作# 1. 创建矩阵import numpy as npa_matrix = np.matrix(a)b_matrix = np.matrix(b)c_result = a_matrix * b_matrixprint(c_result.shape)print(c_result)# 当前的结果为(2,2) [[22,28],[49,64]]# 当前的运算为:[[1*1+2*3+3*5=22 ,1*2+2*4+3*6=28],[4*1+5*3+6*5=49,4*2+5*4+6*6=64]]# 这个计算为a中的第一个数组中的每个数乘以对应的b中的每一行的和获得的数据就是结果中的第一个数组,a中的第二个数组中的每个数乘以b中每一列中的每一个数的和就是结果中的第二个数组# 假设存在这样一组数据,三家连锁店三天的营业额,其中第一个店的利润为总利润的50%,第二个店为20%,最后一个店为30%,求三天实际利润marks = [[114, 112, 118],[105, 110, 120],[118, 119, 105]]# 分析,当前的marks中的数据为3,3这个形状,需要变成 3,1这种类型,所以需要将这个矩阵与形状3,1这个矩阵进行相乘points = [[0.5],[0.2],[0.3]]# 开始计算marks_matrix = np.matrix(marks)points_matrix = np.matrix(points)print("当前操作的结果为:{}".format(marks_matrix * points_matrix))# 当前的操作正确

结果:

总结:

1.要实现当前矩阵间的乘法操做,需要将当前的矩阵使用np.matrix()方法将一个普通的二维数组转化成可以计算的矩阵才行

2.进行操作的时候需要遵守运算规则(a,b) * (b*c)=(a,c)这种模式,否则可能不能运算

3.使用numpy读取文件并操作数据

数据文件:datas.txt

# 使用numpy执行当前的文件读取操作import numpy as np# 读取文件的操作使用np.genformtxt就是读取普通的txt的文本文件read_np_array = np.genfromtxt("datas.txt", delimiter=",", dtype=np.int32)print(read_np_array)# 输出当前读取后的数据类型print(read_np_array.dtype) # 默认为 float64添加 dtype=np.int32后结果为int32# 输出当前的nparray中的形状print("输出当前读取数据的类型:{}".format(read_np_array.shape))# 输出层数据的最大值print(read_np_array.max())# 求出当前的的前两天的数据print("输出5家店铺前两天的销售金额:{}".format(read_np_array[:5, :2]))print("输出第三家店后三天的销售金额:{}".format(read_np_array[2, 2:]))print("输出当前每家店铺的5天中的销售最大值:{}".format(read_np_array.max(axis=1)))print("输出当前这五天中的每天的销售最大值:{}".format(read_np_array.max(axis=0)))print("输出销售金额大于115的销售金额:{}".format(read_np_array[read_np_array > 115]))print("输出当前的销售总额:{}".format(read_np_array.sum()))# print("输出销售金额大于115的金额所在的索引:{}".format(np.))print("输出每家店的销售总额:{}".format(read_np_array.sum(axis=1)))print("输出第一天的销售总额:{}".format(read_np_array.sum(axis=0)[0]))# 使用矩阵乘法 (5,5) * (5,1) = (5,1)data = [[0.2],[0.2],[0.2],[0.2],[0.2],]print(np.matrix(read_np_array) * np.matrix(data))

结果:

总结:

1.读取数据文件使用np.genfromtxt()方法从一个文本文件中读取数据,并指定分隔符delimiter,还可以指定dtype方式按照指定的类型读取(不指定默认为float64,如果是字符默认为nan)

4.总结

1.使用numpy对矩阵以及数组间的操作需要遵循规则,否则就会报错

2.numpy对同一类型的数据操作具有优势,如果类型不同就会出现问题

3.使用numpy可以很容易的读取并操作数据

以上纯属个人见解,如有问题请联系本人!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。