首页 > 其他分享 >numpy库

numpy库

时间:2023-02-03 12:12:24浏览次数:32  
标签:输出 ## 索引 数组 np array numpy

numpy库

  • 开源,方便使用数组、矩阵

  • 安装库

    • 使用Python时,可以通过包管理器pip安装numpy

      pip install numpy
      
    • 使用anaconda时,不需要安装,anaconda本身已有numpy库

  • 导入库

    import numpy as np
    

数组对象(ndarray)

  • numpy定义了一个n维数组对象,简称ndarray对象,它是一个一系列相同类型元素组成的数组集合
  • 相比直接用Python列表操作更高效

1. 创建数组

  • 从列表产生数组:np.array

    lis = [2,4,6,8]
    a = np.array(lis)
    a
    ## 输出结果:
    array([2, 4, 6, 8])
    
  • 从列表传入:np.array

    a = np.array([2,4,6,8])
    a
    ## 输出结果:
    array([2, 4, 6, 8])
    
  • 生成全为0或全为1的数组:np.zerosnp.ones

    np.zeros(5)
    ## 输出结果(默认是浮点型数据):
    array([0., 0., 0., 0., 0.])
    
    np.ones(5,dtype = int)
    ## 输出结果:
    array([1, 1, 1, 1, 1])
    
  • 使用fill方法将数组设为指定值:

    a = np.array([2,4,6,8])
    a.fill(5)
    a
    ## 输出结果:
    array([5, 5, 5, 5])
    
    a = np.array([2,4,6,8])
    a = a.astype('float')  #将数组a中元素都转换为浮点型
    a.fill(2.5)
    a
    ## 输出结果:
    array([2.5, 2.5, 2.5, 2.5])
    
  • 生成整数序列:np.arange

    a = np.arange(1,10)  #参数分别为起始值(包含)、结束值(不包含),即左闭右开
    b = np.arange(1,10,2) #参数分别为起始值(包含)、结束值(不包含)、间隔
    print(a,b)
    ## 输出结果:
    [1 2 3 4 5 6 7 8 9] [1 3 5 7 9]
    
  • 生成等差数列:np.linspace

    a = np.linspace(1,10,21) #参数分别为起始值(包含)、结束值(包含)、需要生成的元素个数
    a
    ## 输出结果:
    array([ 1.  ,  1.45,  1.9 ,  2.35,  2.8 ,  3.25,  3.7 ,  4.15,  4.6 ,  5.05,  5.5 ,  5.95,  6.4 ,  6.85,  7.3 ,  7.75,  8.2 ,  8.65,  9.1 ,  9.55, 10.  ])
    
  • 生成随机数:np.random

    np.random.rand(5) #随机生成0到1之间的5个数
    ## 输出结果:
    array([0.9382636 , 0.45850526, 0.27829649, 0.33843361, 0.06855943])
    
    np.random.randn(5) #随机生成服从标准正态分布的5个数
    ## 输出结果:
    array([ 0.9033228 , -2.09249594, -0.18305873,  1.55344348,  0.56880628])
    
    np.random.randint(1,10,5) #随机生成1-10之间的5个整数
    ## 输出结果:
    array([4, 6, 2, 2, 4])
    

2. 数组属性

​ 首先定义一个数组 a = np.array([[2,4,6,8],[1,3,5,7]])

  • 查看类型

    type(a)
    ## 输出结果:
    numpy.ndarray   #numpy中的n维数组
    
  • 查看数组中元素的数据类型

    a.dtype
    ## 输出结果:
    dtype('int32')
    
  • 查看形状尺寸

    a.shape
    或 np.shape(a)
    ## 输出结果:
    (2, 4)    #返回元组,每个元素代表这一维的元素个数
    
  • 查看数组中元素个数

    a.size
    ## 输出结果:
    8
    
  • 查看数组维度

    a.ndim
    ## 输出结果: 
    2
    

3. 索引与切片

3.1 一维数组

​ 首先定义一个简单的一维数组 a = np.array([2,4,6,8,10,12])

  • 索引

    数组索引与列表一样,也是从0开始

    a[2]  #访问数组a中索引为2的元素
    ## 输出结果:
    6
    
  • 修改数组中元素的值

    与列表一样,直接对其赋值

    a[1] = 2
    a
    ## 输出结果:
    array([ 2,  2,  6,  8, 10, 12])
    
  • 切片

    支持负索引

    a[1:3]
    ## 输出结果:
    array([2, 6])
    
    a[::2]  #从头取到尾,间隔为2
    ## 输出结果:
    array([ 2,  6, 10])
    
    a[-5:2]
    ## 输出结果:
    array([2])
    

3.2 多维数组

​ 定义一个二维数组 a = np.array([[1,3,5,7,9],[2,4,6,8,10],[11,13,15,17,19],[12,14,16,18,20]])

  • 切片时先写行索引,再写列索引,中间用逗号隔开

    a[1,2]  #数组a的行索引为1,列索引为2的元素,即第2行第3列元素
    ## 输出结果:
    6
    
    a[:2,::2] #行索引为0和1,列索引为0,2,4的元素
    ## 输出结果:
    array([[ 1,  5,  9],
           [ 2,  6, 10]])
    
    a[:,2]  #第3列元素
    ## 输出结果:
    array([ 5,  6, 15, 16])
    
  • 数组的切片是引用机制,意味着Python并没有给切出来的元素分配新的存储空间,而是让它指向了原始数组所分配的内存空间。因此,当对切片切出来的变量重新赋值时,原始数组相应的值也会改变,列表的切片不具有引用机制。例如:

    a = np.array([2,4,5,6,7])
    b = a[2:4]
    b[0] = 0
    a
    ## 输出结果:
    array([2, 4, 0, 6, 7])
    

    要想给切片出来的b分配新的内存空间,可以使用 copy() 方法产生一个复制,例如:

    a = np.array([2,4,5,6,7])
    b = a[2:4].copy()
    b[0] = 0
    a
    ## 输出结果:
    array([2, 4, 5, 6, 7])
    

4. 花式索引

  • 一维

    • 通过列表索引

      a = np.array([0,2,4,6,8,10,12,14,16,18])
      lst = [0,1,3,8]
      a[lst]
      ## 输出结果:
      array([ 0,  2,  6, 16])
      
    • 通过布尔数组索引

      a = np.array([0,2,4,6,8,10,12,14,16,18])
      b = np.array([0,4,0,3,0,0,-2,0,0,1], dtype = bool)
      a[b]   #取布尔数组b中True对应位置的索引,b必须与a等长
      ## 输出结果:
      array([ 2,  6, 12, 18])
      
  • 二维

    • 通过指定行和列索引

      a = np.array([[1,3,5,7,9],[2,4,6,8,10],[11,13,15,17,19],[12,14,16,18,20]])
      a[(1,2),(0,4)]  #行索引为1,列索引为0的元素,以及行索引为2列索引为4的元素
      ## 输出结果:
      array([ 2, 19])
      
    • 通过布尔数组索引

      a = np.array([[1,3,5,7,9],[2,4,6,8,10],[11,13,15,17,19],[12,14,16,18,20]])
      b = np.array([2,1,0,5,0],dtype = bool)
      a[1:3,b]  #行索引为1、2,列索引为b数组中True对应的索引
      ## 输出结果:
      array([[ 2,  4,  8],
             [11, 13, 17]])
      
  • 花式索引不具有引用机制,直接复制过来

5. where语句

np.where(a) 返回数组a中所有非零元素索引

a = np.array([1,3,0,5,7,0,9])
np.where(a)   #返回数组a中非零元素的索引
## 输出结果:
(array([0, 1, 3, 4, 6], dtype=int64),)  #返回的是元组的形式
a = np.array([1,3,0,5,7,0,9])
np.where(a > 5)   #返回数组a中大于5的元素的索引
## 输出结果:
(array([4, 6], dtype=int64),)
a = np.array([1,3,0,5,7,0,9])
a[a > 5]   #返回数组a中大于5的元素
## 输出结果:
array([7, 9])
a = np.array([1,3,0,5,7,0,9])
a[np.where(a > 5)]   #返回数组a中大于5的元素
## 输出结果:
array([7, 9])

6. 数组类型

  • 数组类型有布尔型、整型、无符号整型、浮点数、复数、字符串、对象、时间

  • 类型转换

    • asarray函数

      a = np.array([1,2,3])
      np.asarray(a,dtype = float)  #将数组a中元素改为浮点型,作为一个新的数组返回,原本的数组a没有改变,仍是整型
      ## 输出结果:
      array([1., 2., 3.])
      
    • astype函数

      a = np.array([1,2,3])
      a.astype(float)  #将数组a中元素改为浮点型,作为一个新的数组返回,原本的数组a没有改变,仍是整型
      ## 输出结果:
      array([1., 2., 3.])
      

7. 数组操作

7.1 一维数组操作

首先定义几个一维数组:

mv_name = np.array(['肖申克的救赎','控方证人','美丽人生','阿甘正传','霸王别姬','泰坦尼克号','辛德勒的名单','这个杀手不太冷','疯狂动物城','海豚湾'])
mv_num = np.array([692795,42995,327855,580897,47853,157074,306904,662552,284652,159302])
mv_score = np.array([9.6,9.5,9.5,9.4,9.4,9.4,9.4,9.3,9.3,9.3])
mv_length = np.array([142,116,116,142,171,194,195,133,109,92])
  • 数组排序

    • sort函数

      np.sort(mv_num)  #默认从小到大排序,返回新数组,不改变原数组
      ## 输出结果:
      array([ 42995,  47853, 157074, 159302, 284652, 306904, 327855, 580897,  662552, 692795])
      
    • argsort函数

      np.argsort(mv_num)   #返回从小到大的排列在数组中的索引位置
      ## 输出结果:
      array([1, 4, 5, 9, 8, 6, 2, 3, 7, 0], dtype=int64)
      
  • 求和

    • sum函数

      np.sum(mv_num)  #返回数组中元素的和
      ## 输出结果:
      3262879
      
      mv_num.sum()  #返回数组中元素的和
      ## 输出结果:
      3262879
      
  • 最大值

    • max函数

      np.max(mv_length)   #返回数组中最大的元素
      ## 输出结果:
      195
      
      mv_length.max()    #返回数组中最大的元素
      ## 输出结果:
      195
      
  • 最小值

    • min函数,用法同max函数
  • 均值

    • mean函数,用法同max函数
  • 标准差

    • std函数,用法同max函数
  • 协方差矩阵

    • cov函数

      np.cov(mv_score,mv_length)  #返回两个数组的相关系数矩阵
      ## 输出结果:
      array([[9.88888889e-03, 4.55555556e-01],
             [4.55555556e-01, 1.26288889e+03]])
      
  • numpy中其余内置函数

    • np.abs 绝对值
    • np.exp 求指数
    • np.median 中位数
    • np.cumsum 累积和
    • 三角函数

7.2 多维数组操作

  • 数组形状

    • shape和reshape函数

      a = np.arange(6)
      a.shape = 2,3   #将数组a转换为2行3列的二维数组,会改变原数组
      a
      ## 输出结果:
      array([[0, 1, 2],
             [3, 4, 5]])
      
      a = np.arange(6)
      a.reshape(2,3)  #将数组a转换为2行3列的二维数组,不改变原数组,返回新数组
      ## 输出结果:
      array([[0, 1, 2],
             [3, 4, 5]])
      
  • 转置

    • T和transpose()

      a = np.array([[1,2,3],[4,5,6]])
      a.T     #转置,不改变原数组,返回新数组
      ## 输出结果:
      array([[1, 4],
             [2, 5],
             [3, 6]])
      
      a = np.array([[1,2,3],[4,5,6]])
      a.transpose()    #转置,不改变原数组,返回新数组
      ## 输出结果:
      array([[1, 4],
             [2, 5],
             [3, 6]])
      
  • 数组连接

    • concatenate函数 np.concatenate((x,y),axis = 0) ,默认按列拼接

      a = np.array([[1,2,3],[4,5,6]])
      b = np.array([[11,12,13],[14,15,16]])
      np.concatenate((a,b))   #默认按列拼接,若要按行拼接,axis = 1
      ## 输出结果:
      array([[ 1,  2,  3],
             [ 4,  5,  6],
             [11, 12, 13],
             [14, 15, 16]])
      
    • 通过array可以将两个相同形状的二维数组拼成三维数组

      np.array((a,b))
      ## 输出结果:
      array([[[ 1,  2,  3],
              [ 4,  5,  6]],
      
             [[11, 12, 13],
              [14, 15, 16]]])
      
    • numpy也提供了三个函数,分别对应上述三种情况

      • np.vstack((a,b)) 按列拼接
      • np.hstack((a,b)) 按行拼接
      • np.dstack((a,b)) 拼成三维数组

标签:输出,##,索引,数组,np,array,numpy
From: https://www.cnblogs.com/DYDNyang/p/17088715.html

相关文章

  • numpy 读写文件
     读写bin文件   ndarray.tofile(fid,sep="",format="%s")       将数组作为txt或bin(默认)写入文件,不保存数组形状和元素类型       fid:文件......
  • Python numpy 入门系列 22 合并ndarray
       ndarray的合并定义要使用的数据源 a=np.array([1,1,1])b=np.array([2,2,2])print('a',a)print('b',b)   <class'n......
  • 高效NumPy操作,避免不必要数组复制
    了解NumPy的内部原理,避免不必要的数组复制来源于:​ ​​​​IPythonCookbook,SecondEdition​​​​​,by ​​​​CyrilleRossant​​​​▶  ​​CodeonGitHub......
  • AttributeError: module 'numpy' has no attribute 'object'
    AttributeError:module'numpy'hasnoattribute'object'    解决方案:pipuninstallnumpypipinstallnumpy==1.23.4 ================================......
  • Python Numpy 中的打印设置函数set_printoptions
    一概述np.set_printoptions()用于控制Python中小数的显示精度。二解析np.set_printoptions(precision=None,threshold=None,linewidth=None,suppress=None,......
  • 为什么你应该使用NumPy数组而不是嵌套的Python列表?
    在本文中,我们将向您展示为什么使用NumPy数组而不是嵌套的Python列表,以及它们之间的异同。PythonNumPyLibraryNumPy是一个Python库,旨在有效地处理Python中的数组。它快......
  • 编写一个 Python 代码以按第 n 列对 NumPy 中的数组进行排序?
    在本文中,我们将向您展示如何在python中按升序和降序按第n列对NumPy中的数组进行排序。NumPy是一个Python库,旨在有效地处理Python中的数组。它快速、简单易学且存储高......
  • 01Numpy性能对比
    importnumpyasnpfromtimeitimporttimeitdefpython_sum(n):a=[i**2foriinrange(n)]b=[i**3foriinrange(n)]c=[]foriinrange(n......
  • numpy广播机制与高级索引使用
    numpy广播机制与高级索引使用NumPy比一般的Python序列提供更多的索引方式。除了整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。类型转换import......
  • numpy 矩阵的用法
    b=list(range(5))b [0,1,2,3,4] #列表区别a=np.arange(5)aarray([0,1,2,3,4])#矩阵生成一个1*24的矩阵,在将她变成2*3*4的数体c=np.arange(24).reshape(2,3,4......