• NumPy创建数组的方法


    1. 蛮力构造法

    np.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
    
    • 1
    import numpy as np
    
    # 如果不指定数据类型,就会根据object参数自动选择合适的数据类型
    a = np.array([[1, 2, 3], [4, 5, 6]])
    # 也可以在创建数组时,指定元素的数据类型
    b = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 特殊数值法

    这里的特殊数值指的是0、1、空值。特殊数值法适合构造全0、全1、空数组,或由0、1组成的类似单位矩阵(主对角线为1,其余为0)的数组。

    np.zeros(shape, dtype=float, order='C')
    np.ones(shape, dtype=float, order='C')
    np.empty(shape, dtype=float, order='C')
    np.eye(N, M=None, k=0, dtype=float, order='C')
    
    • 1
    • 2
    • 3
    • 4

    固定参数shape表示生成的数组结构,默认参数dtype用于指定数据类型(默认浮点型)。order参数指定的是数组在内存中的存储顺序,'C'表示C语言使用的行为优先方式,'F'表示Fortran语言使用的列优先方式

    import numpy as np
    
    print(np.zeros(6))
    print(np.zeros((2, 3)))
    print(np.ones((2, 3), dtype=int))
    print(np.empty((2, 3)))
    print(np.eye(3, dtype=np.uint8))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果需要一个3行4列,初始值都是255的无符号整型数组

    • 方案1:全1数组乘以255
    • 方案2:全0数组加255
    • 方案3:使用填充函数fill()
    import numpy as np
    
    a = np.empty((3, 4), dtype=np.uint8)
    a.fill(255)
    print(a)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3. 随机数值法

    np.random.random(size=None)
    np.random.randint(low, high=None, size=None)
    np.random.normal(loc=0.0, scale=1.0, size=None)
    
    • 1
    • 2
    • 3

    random()函数用于生成[0,1)区间内的随机浮点型整数,randint()函数用于生成[low,high)区间内的随机整形数组。参数size是一个元组,用于指定生成数组的结构

    import numpy as np
    
    print(np.random.random(3))
    print(np.random.random((2, 3)))
    print(np.random.randint(5))
    print(np.random.randint(1, 5, size=(2, 3)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    normal()函数用于生成以loc为均值、以scale为标准差的正态分布数组。

    import numpy as np
    # 导入绘图模块
    import matplotlib.pyplot as plt
    
    # 生成正态分布数据
    tall = np.random.normal(170, 4, 1000)
    # 从156厘米到190厘米,每2厘米一个分段
    bins = np.arange(156, 190, 2)
    # 绘制柱状图
    plt.hist(tall, bins)
    # 显示图形
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4. 定长分割法

    import numpy as np
    
    np.arange(start, stop, step, dtype=None)
    np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    
    • 1
    • 2
    • 3
    • 4

    arange()函数和Python的range()函数用法相同,并且还可以接收浮点型参数

    import numpy as np
    
    print(np.arange(5))
    print(np.arange(5, 11))
    print(np.arange(5, 11, 2))
    print(np.arange(5.5, 11, 1.5))
    print(np.arange(3, 15).reshape(3, 4))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    linspace()函数需要3个参数:一个起点、一个终点、一个返回元素的个数。linspace()函数返回的元素包括起点和终点,可以通过endpoint参数选择是否包含终点

    import numpy as np
    
    # 返回0到5之间的5个等距数值,包括0和5
    print(np.linspace(0, 5, 5))
    # 返回5个等距数值,包括0但不包括5
    print(np.linspace(0, 5, 5, endpoint=False))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5. 重复构造法

    repeat()函数用来重复数组元素。但如果被重复的数组是一个多维数组,且repeat()函数指定了axis参数,情况就会变得有些复杂

    import numpy as np
    
    a = np.arange(5)
    print(a)
    # 重复一维数组元素3次
    print(np.repeat(a, 3))
    a = np.arange(6).reshape((2, 3))
    print(a)
    # 重复二维数组元素3次,不指定轴
    print(np.repeat(a, 3))
    # 重复二维数组元素3次,指定0轴
    print(np.repeat(a, 3, axis=0))
    # 重复二维数组元素3次,指定1轴
    print(np.repeat(a, 3, axis=1))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    tile()将整个数组而非数组元素水平和垂直重复指定的次数

    import numpy as np
    
    a = np.arange(5)
    print(a)
    # 重复一维数组3次
    print(np.tile(a, 3))
    # 重复一维数组3行2列
    print(np.tile(a, (3, 2)))
    a = np.arange(6).reshape((2, 3))
    print(a)
    # 重复二维数组3次
    print(np.tile(a, 3))
    # 重复二维数组2行3列
    print(np.tile(a, (2, 3)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    6. 网格构造法

    • 用数组表示经纬度网格方式一:用两个一维数组表示。使用定长分隔函数linspace(),将经度从-180°180°分为间隔为10°的37个点,将纬度从90°-90分为间隔为10°的19个点,得到两个一维数组

      import numpy as np
      
      # 精度为10°,共计37个经度点
      lon = np.linspace(-180, 180, 37)
      # 精度为10°,共计19个纬度点
      lat = np.linspace(90, -90, 19)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 用数组表示经纬度网格方式二:用两个二维数组分别表示经度网格和纬度网格。经度网格中每一列的元素都是相同的(同一个经度),纬度网格中每一行的元素都是相同的(同一个纬度)。生成二维经纬度网格的常用函数是np.meshgrid(),该函数以一维经度数组lon和一维纬度数组lat为参数,返回二维的经度数组和纬度数组

      import numpy as np
      
      # 精度为10°,共计37个经度点
      lon = np.linspace(-180, 180, 37)
      # 精度为10°,共计19个纬度点
      lat = np.linspace(90, -90, 19)
      
      lons, lats = np.meshgrid(lon, lat)
      print(lons.shape)
      print(lats.shape)
      print(lons[:,0])
      print(lons[0])
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • 构造经纬度网格,除了使用np.meshgrid()函数外,还有一个更强大的方法,这个方法可以直接生成纬度网格和经度网格而无需借助于一维数组(请注意,纬度在前,经度在后)

      import numpy as np
      
      # 使用实数指定网格经度为5°
      lats, lons = np.mgrid[90:-91:-5, -180:181:5]
      print(lons.shape, lats.shape)
      # 也可以用虚数指定分隔点数
      lats, lons = np.mgrid[90:-90:37j, -180:180:73j]
      print(lons.shape, lats.shape)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    7. 自定义数据类型

    • 结果显示:数组会将所有元素的数据类型都转为'类型。这里的U标识Unicode字符串;<表示字节顺序,意为小端在前(低位字节存储在最小地址中);32表示数组元素占用32字节,数组元素占用的字节数由所有元素中最长的那个元素决定

      import numpy as np
      
      print(np.array(['Anne', 1.70, 55]).dtype)
      
      • 1
      • 2
      • 3
    • 怎样在数组中保留用以生成数组的列表中的元素类型呢?这就需要用到自定义数据类型了。自定义数据类型类似于C语言的结构体,其代码如下

      import numpy as np
      
      mytype = np.dtype([('name', 'S32'), ('tall', np.float), ('bw', np.int)])
      print(np.array([('Anne', 1.70, 55)], dtype=mytype))
      
      • 1
      • 2
      • 3
      • 4

  • 相关阅读:
    Vue源码学习(七):合并生命周期(混入Vue.Mixin)
    排查手机应用app微信登录问题不跳转失败原因汇总及其解决方案
    454. 四数相加 II
    Java之jstack工具的使用
    Recurrent Dynamic Embedding for Video Object Segmentation
    Ubuntu上线一个JAVA环境微服务架构的系统
    conda创建虚拟环境&conda常用命令&复制环境
    Milvus Cloud——Agent 框架工作方式
    docker系列(4) - docker镜像制作
    WMS系统4.0,仓库管理的20年历史变局你知道吗?
  • 原文地址:https://blog.csdn.net/feizuiku0116/article/details/126705818