Python:处理矩阵之NumPy库(上)

打印 上一主题 下一主题

主题 697|帖子 697|积分 2091

目次
        1.前言
        2.Python中打开文件操作
        3.开端熟悉NumPy库
        4.使用NumPy库
        5.NumPy库中的维度
        6.array函数
        7.arange函数     
        8.linspace函数
        9.logspace函数
        10.zeros函数
        11.eye函数

        前言

        NumPy库是一个开源的Python科学计算库,它提供了高性能的多维数组对象、派生对象(如掩码数组、矩阵)以及用于快速操作数组的各种例程,包括逻辑、形状操作、离散傅立叶变动、根本线性代数、根本统计运算、随机模拟等操作,本系列博客讲重点对NumP库的函数已经操作进行解说

Python中打开文件操作

        本系列是对NumPy库的解说,为什么第一末节却是使用Python打开文件?这是因为在数学建模中,数据的提供往往是Excel格式,要对数据进行操作之前,我们得先了解在Python中根本的文件操作:
        1.open函数用于打开文件:
                1.Path为文件路径
                2.mode指定模式,默以为r:
模式指令备注
x创建文件,若文件已存在则失败
a写入模式,文件存在则在末尾追加
r读取模式
w写入模式,并线截断文件
b二进制模式
t文本模式
+更新磁盘文件,读写并且读入
                3.buffering为缓冲区(内存的读写速率快于外设,所以大部门情况不用设,即不大于0

                4.encoding为编码方式

  1. filePtr = open(path,mode='r',buffering=-1,encoding='utf-8-sig')
  2. //定义一个文件指针filePtr指向打开的文件
复制代码
        2.seek函数用于移动文件的读取指针到指定位置。seek函数必要使用文件对象进行调用,无返回值:

  1. value = 3
  2. #定义变量value移动光标至3的位置
  3. type.seek(0)
  4. #移动到文件头位置
  5. type.seek(value)
  6. #将文件读取指针移动到文件的第p个字节处,表示绝对位置
  7. type.seek(value, 1)
  8. #在当前位置的基础上,将文件读取指针移动p个字节,表示相对位置
  9. type.seek(value, 2)
  10. #在文件尾的基础上,将文件读取指针移动p个字节,表示相对位置
复制代码
        3.read函数用于从文件光标位置读取字节:

  1. value_A = type.read(5)
  2. #表示读取五个字符赋值给value_A
  3. value_B = type.read()
  4. #无参数表示读取至文件结束
复制代码
        4.readline函数用于一次读取文件一行内容,以字符串的形式存储:

  1. value_A = type.readline()
  2. #表示读取文件一行内容
  3. value_B = type.readline()[:-1]
  4. #使用切片可控制读取到的位置,[:-1]代表该行的末尾
复制代码
        5.readlines函数用于读取文件所有行,以列表的形式存储:

  1. value_A = type.readlines()
  2. #表示读取文件所有行
  3. value_B = type.readlines()[:5]
  4. #使用切片可控制读取到的位置,[:5]代表读取至第五行
复制代码
        6.split函数用于分割数据:

                1.格式:split('text',value)
                2.以text内容分割内容,分割次数为value
                3.value的默认值为 -1,即分割所有出现次数
                4.列表格式不能使用split函数分割,只能字符串格式才能分割
  1. value_A = type.readline().split(',')
  2. #表示以逗号分割所读取到的行内容
  3. value_B = type.readline().split(',',3)
  4. #表示以逗号分割三次所读取到的行内容
复制代码
        7.strip函数用于删除两侧字符

                1.格式:strip(value)
                2.当value为空时,代表删除头尾字符(换行,回车,制表符,空格)
                3.不为空则代表删除头尾的value值
  1. value_A = type.strip(',')
  2. #代表删除头尾的逗号字符
  3. value_B = type.strip()
  4. #代表删除头尾的换行,回车,制表符和空格字符
复制代码
        8.lstrip函数用于删除左侧字符:

                1.格式:lstrip(value)
                2.当value为空时,代表删除开头字符(换行,回车,制表符,空格)
                3.不为空则代表删除开头的value值
  1. value_A = type.lstrip(',')
  2. #代表删除开头的逗号字符
  3. value_B = type.lstrip()
  4. #代表删除开头的换行,回车,制表符和空格字符
复制代码
        9.rstrip函数用于删除右侧字符:
                1.格式:rstrip(value)
                2.当value为空时,代表删除末尾字符(换行,回车,制表符,空格)
                3.不为空则代表删除末尾的value值
  1. value_A = type.rstrip(',')
  2. #代表删除末尾的逗号字符
  3. value_B = type.rstrip()
  4. #代表删除末尾的换行,回车,制表符和空格字符
复制代码

开端熟悉NumPy库

        NumPy库主要的功能之一用来操作数组和矩阵。是科学计算、深度学习等高端领域的必备工具。在使用TensorFlow、Caffe框架训练神经网络模型时,必要进行大量复杂的运算,可以直接调用NumPy内里的API,而且NumPy还包罗了很多使用的数学函数,覆盖了很多的数学领域,比如,线性代数、傅里叶变动、随机数生成。在数学建模比赛中,你还可以以为Python + NumPy == Matlab     

图1.动手学NumPy库


使用NumPy库

        使用Numpy库前必要导入Numpy库
  1. import numpy as _numpy    #导入numpy库并取别名为_numpy
复制代码

NumPy库中的维度

        在介绍NumPy库的操作前,我们必要了解NumPy中的维度。Numpy中维度就是平常所说的一维(只有x轴)、二维(x、y轴)、三维(x、y、z轴)
  1. #一维使用print输出后有一对花括号 [ ]
  2. #二维使用print输出后有两对花括号 [ [] ]
  3. #三维使用print输出后有三对花括号[ [ [] ] ]
复制代码

array函数

        array函数用于将列表或元组转换为数组
  1.  array(接收对象,dtype = 转换后数据类型,copy = True,order = 'K',subok = False,ndmin = 0)
复制代码
参数备注
接收对象可为公开数组接口的任何对象,__array__方法返回数组的对象,或任何(嵌套)序列
dtype数组所需的数据范例。如果没有给出,那么范例将被确定为保持序列中的对象所需的最小范例
copy数组所需的数据范例。如果没有给出,那么范例将被确定为保持序列中的对象所需的最小范例
order指定阵列的内存结构。如果接收对象不是数组,则新创建的数组将按C顺序分列(行主要),除非指定了'F',在这种情况下,它将接纳Fortran顺序(专业列)。如果object是一个数组,则以下建立。 {'K','A','C','F'},可选
subok如果为True,则子类将被通报,否则返回的数组将被强制为基类数组(默认)
ndmin指定结果数组应具有的最小维数。根据必要,将根据必要预先设置形状
返回值满足要求的数组对象
       表1.array函数参数表

        测试用例:
  1. s1 = [1,2,3,10]
  2. #创建一维列表s1
  3. a1 = _numpy.array(s1,dtype = int)
  4. #将列表s1转换为数组,数据类型为int型
  5. s2 = [[1,2,3,10]]
  6. #创建二维列表s2
  7. a2 = _numpy.array(s2,dtype = int)
  8. #将列表s1转换为数组,数据类型为int型
  9. tp = (2,4,6,9,4)
  10. 创建元组tp
  11. a3 = _numpy.array(tp,dtype = float)
  12. #将列表a2转换为数组,数据类型为flosr型
  13. #s1.dtype      s1.size        s1.itemsize   s1.ndim       s1.shape
  14. #查看数组类型   查看元素个数   查看元素大小   查看数组维度   查看数组结构
复制代码

arange函数     

        arange函数用于生成一维数组
  1. arange([start , ],stop[ , step ,],stype = None)
复制代码
参数备注
start代表初始值,默认从0开始
stop代表停止值,必填参数
step代表步长,默以为1
表2.arange函数参数表

        测试用例:
  1. _numpy.arange(10)
  2. #array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  3. _numpy.arange(5,10)
  4. #array([5, 6, 7, 8, 9])
  5. _numpy.arange(5,10,2)
  6. #array([5, 7, 9])
  7. #以上分别省略了初始值和步长
复制代码


linspace函数

        linspace函数用于生成一个一维数组,其数据是一个等差数列
  1. linspace(start,stop,num = 50,endpoint = True,retstep = False,dtype = None,axis = 0)
复制代码
参数备注
start代表初始值,必填参数
stop代表停止值,必填参数
num代表生成数据的个数,默以为50
endpoint代表是否包罗停止值,默以为True
retstep代表是否显示步长,默以为False
dtype代表数据范例
axis代表轴向,默以为0,代表沿X轴
表3.linspace函数参数表

        测试用例:
  1. _numpy.linspace(10,20,10)
  2. #array([10.        , 11.11111111, 12.22222222, 13.33333333, 14.44444444,
  3.        15.55555556, 16.66666667, 17.77777778, 18.88888889, 20.        ])
  4. _numpy.linspace(10,20,10,endpoint = False)
  5. #array([10., 11., 12., 13., 14., 15., 16., 17., 18., 19.])
  6. _numpy.linspace(10,20,10,endpoint = False,retstep = True)
  7. #(array([10., 11., 12., 13., 14., 15., 16., 17., 18., 19.]), 1.0)
  8. _numpy.linspace(10,20,10,endpoint = True,retstep = True,dtype = int)
  9. #(array([10, 11, 12, 13, 14, 15, 16, 17, 18, 20]), 1.1111111111111112)
  10. #最后两句代码显示的步长不同,但是数组相同。是因为dtype为int类型,所以小数强转为int类型
复制代码



logspace函数

        logspace函数用于生成一个一维数组,其数据是一个等比数列
  1. logspace(start,stop,num = 50,endpoint = True,base = 10.0,dtype = None,axis = 0)
复制代码
参数备注
start代表初始值,必填参数
stop代表停止值,必填参数
num表生成数据的个数,默以为50
endpoint代表是否包罗停止值,默以为True
base代表底数,默以为10.0
dtype代表数据范例
axis代表轴向,默以为0,代表沿X轴
表4. logspace函数参数表

  1. _numpy.logspace(10,20,5)
  2. #array([1.00000000e+10, 3.16227766e+12, 1.00000000e+15, 3.16227766e+17,1.00000000e+20])
  3. _numpy.logspace(10,20,5,endpoint = False)
  4. #array([1.e+10, 1.e+12, 1.e+14, 1.e+16, 1.e+18])
  5. _numpy.logspace(10,20,5,endpoint = False,base= 100.0)
  6. #array([1.e+20, 1.e+24, 1.e+28, 1.e+32, 1.e+36])
  7. #底数为100
  8. _numpy.logspace(10,20,5,endpoint = True,base = 10.0,dtype = int,axis = 0)
  9. #array([-2147483648, -2147483648, -2147483648, -2147483648, -2147483648])
  10. #底数为10
复制代码

zeros函数

        zeros函数用于创建一个元素全为零的数组
  1. zeros(shape,dtype = float,order = 'C')
复制代码
参数备注
shape代表数组尺寸,可以是数值或元组
dtype代表数组中的元素的数据范例,默以为float
order代表存储多维数组时,是列优先'F'还是行优先'C',默以为行优先
shape代表数组尺寸,故可以使用[]或()分别代表列表或元组的尺寸
表5. zeros函数参数表

  1. _numpy.zeros((2,2))
  2. #array([[0., 0.],
  3.        [0., 0.]])
  4. _numpy.zeros([2,2])
  5. #array([[0., 0.],
  6.        [0., 0.]])
  7. _numpy.zeros((2,2),dtype = int)
  8. #array([[0, 0],
  9.        [0, 0]])
  10. #与前两个元素类型不同
  11. _numpy.zeros((3,5),dtype = int,order = 'F')
  12. #array([[0, 0, 0, 0, 0],
  13.        [0, 0, 0, 0, 0],
  14.        [0, 0, 0, 0, 0]])
复制代码
PS:当shape为[]或()时,可以传入多个数值,如_numpy.zeros((2,2,2)),代表2个3维数组,其元素含有2行2列。总结:当传入的数值大于2时,每增加一个数值代表维度加一,而最终的数字个数由前两个数字综合确定

eye函数

        eye函数用于创建元素中一个对角线全为一的数组矩阵
  1. eye(N,M = None,k = 0,btype = < class 'float' >,order = 'C')
复制代码
参数备注
N代表行数
M代表列数
k代表对角线元素个数,默以为0
dtype代表数组中元素的数据范例,默以为float
order代表存储多维数组时,是列优先'F'还是行优先'C',默以为行优先
表5. eye函数参数表

  1. _numpy.eye(3,3)
  2. #array([[1., 0., 0.],
  3.        [0., 1., 0.],
  4.        [0., 0., 1.]])
  5. _numpy.eye(3,3,dtype = int)
  6. #array([[1, 0, 0],
  7.        [0, 1, 0],
  8.        [0, 0, 1]])
  9. _numpy.diag([3,4,5])
  10. #array([[3, 0, 0],
  11.        [0, 4, 0],
  12.        [0, 0, 5]])
  13. _numpy.diag((3,4,5),1)
  14. array([[0, 3, 0, 0],
  15.        [0, 0, 4, 0],
  16.        [0, 0, 0, 5],
  17.        [0, 0, 0, 0]])
  18. _numpy.diag((3,4,5),-1)
  19. #array([[0, 0, 0, 0],
  20.        [3, 0, 0, 0],
  21.        [0, 4, 0, 0],
  22.        [0, 0, 5, 0]])
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表