• NumPy基础知识


    1. 介绍

    NumPy的核心是多维数组numpy.ndarray,矩阵类numpy.matrix是多位数组类的派生类。以多位数组类为数据组织结构,Numpy提供了众多的数学、科学和工函数,此外,NumPy还提供了以下多个子模块

    子模块名功能
    numpy.random随机抽样子模块
    numpy.linalg线性代数子模块
    numpy.fft傅里叶变换子模块
    numpy.ctypeslibC-Types外部函数接口子模块
    numpy.emath具有自动域的数学函数子模块
    numpy.testing测试支持子模块
    numpy.matlib矩阵库子模块
    numpy.dualScipy加速支持子模块
    numpy.distutils打包模块

    2. 安装和导入

    pip install numpy
    
    • 1
    import numpy as np
    
    • 1

    3. 数组和列表的比较

    • 列表
      • 元素类型不受限制。同一个列表内,列表元素可以是不同的数据类型,甚至可以是函数
      • 元素可以动态增减。例:append()insert()pop()remove()
    • 数组
      • 数组元组必须具有相同的的数据类型
      • 数组一旦创建,其元素数量就不能再改变了

    4. 数组的数据类型

    Numpy支持的数据类型主要有整形(integer)、浮点型(float)、布尔型(bool)和复数型(complex),每一种数据类型根据占用内存的字节数又分为多个不同的类型,具体的数据类型如图所示。Numpy也支持字符串类型和自定义类型的数据,但绝大多数函数和方法不适用于非数值型数组

    • 整型:np.int8np.int16np.int32np.int64
    • 无符号整型:np.uint8np.uint16np.uint32np.uint64
    • 浮点型:np.float16np.float32np.float64
    • 布尔型:np.bool
    • 复数型:np.complex64np.complex128

    创建数组时,如果不指定数据类型,Numpy会根据输入的参数自动选择合适的数据类型。通常在指定数据类型的时候,可以省略类型后面的数字。如果省略数字,整型和无符号整形默认是32位,浮点型默认是64位,复数型默认是128位

    import numpy as np
    
    a = np.array([0, 1, 2])
    print(a.dtype)
    b = np.array([0, 1, 2.0])
    print(b.dtype)
    c = np.array([0, 1, 2], dtype=np.uint8)
    print(c.dtype)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5. 数组的属性

    属性说明
    ndarray数组的数据类型
    ndarray.shape数组的结构,也可以理解为数组的形状
    ndarray.size数组的元素个数
    ndarray.itemsize每个元素占用内存的大小,以字节为单位
    ndarray.ndim数组的维度数,也叫秩
    ndarray.flags数组的内存信息
    ndarray.real数组实部
    ndarray.imag数组虚部
    ndarray.data数组在内存中实际存储区域的起始地址
    import numpy as np
    
    a = np.arange(6)
    print(a)
    print(a.shape)
    print(a.dtype)
    
    # 改变数组结构
    b = a.reshape((2, 3))
    print(b)
    # 改变数据类型
    c = b.astype(np.float)
    print(c.dtype)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6. 维、秩、轴

    维,就是维度。通常说数组是几维的,就是指维度数,如三维数组的维度数就是3。维度数还有一个专用名字,叫秩,也就是数组属性ndim。一维数组,类比于一维空间,只有一个轴,那就是0轴。二维数组,类比于二维空间,有两个轴,习惯表示成行和列,行的方向是0轴,列的方向是1轴。三维数组,类比于三维空间,有三个轴,习惯表示成层、行和列,层的方向是0轴,行的方向是1轴,列的方向是2轴

    import numpy as np
    
    # 3层2行3列的结构
    a = np.arange(18).reshape((3, 2, 3))
    print(a)
    # 全部元素之和
    print(a.sum())
    # 0轴方向求和:3层合并成1层,返回二维数组
    print(a.sum(axis=0))
    # 1轴方向求和:2行合并成1行,返回二维数组
    print(a.sum(axis=1))
    # 2轴方向求和:3列合并成1列,返回二维数组
    print(a.sum(axis=2))
    # 分层求和方法1
    print(a.sum(axis=1).sum(axis=1))
    # 分层求和方法2
    print(a.sum(axis=2).sum(axis=1))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    7. 广播和矢量化

    • Numpy处理速度远高于Python的原因:广播和矢量化
    • 广播:隐式的对每个元素实施操作
    • 矢量化:代码中没有显式的循环、索引等

    要求:数值型数组的各个元素加1

    import numpy as np
    
    # 列表实现
    a = [0, 1, 2, 3, 4]
    for i in range(len(a)):
        a[i] += 1
    print(a)
    
    # numpy实现
    b = np.array([0, 1, 2, 3, 4])
    b += 1
    print(b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    要求:两个等长的数值型数组的对应元素相加

    import numpy as np
    
    # 列表实现
    a = [0, 1, 2, 3, 4]
    b = [5, 6, 7, 8, 9]
    print([i+j for i, j in zip(a, b)])
    
    # numpy实现
    a = np.array([0, 1, 2, 3, 4])
    b = np.array([5, 6, 7, 8, 9])
    print(a+b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

  • 相关阅读:
    WPF_某SDK的使用心得_一定要区分32位和64位
    uni-app集成mui-player
    [12] 使用 CUDA 加速排序算法
    [数据集][目标检测]老鼠检测数据集VOC+YOLO格式4107张1类别
    jvm丨class的类加载机制
    joplin更新后找不到文章
    java springboot 实现 对象或对象数组 转为 前端可解析的JSON字符串格式
    docker版jxTMS使用指南:使用webSocket
    软件测试/测试开发丨接口测试学习笔记-常见的接口协议
    基于Java毕业设计眼科医疗室信息管理系统源码+系统+mysql+lw文档+部署软件
  • 原文地址:https://blog.csdn.net/feizuiku0116/article/details/126705612