Python中Numpy库学习指南(第一篇)

文章目录

  • 前言
  • 一、Numpy是什么?
  • 二、使用步骤
  • 1.Numpy环境安装
  • 2.引入Numpy库
  • 3Nnumpy Ndarray 对象
  • Numpy 数据类型
  • Numpy 数组属性
  • 1, ndarray.ndim
  • 2,ndarray.shape
  • 3,Numpy 创建数组
  • 1,numpy.empty
  • 2,numpy.zeros
  • 3,numpy.ones
  • 4、numpy.zeros_like
  • 5、numpy.ones_like
  • 4,NumPy 从已有的数组创建数组
  • 1、numpy.asarray
  • 2、numpy.fromiter
  • 5,NumPy 从数值范围创建数组
  • 1,numpy.arange
  • 2,numpy.linspace
  • 总结
  • 前言

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。本文会介绍Numpy的安装介绍和关于Numpy库中数组创建的相关操作。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、Numpy是什么?

    NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能
  • 二、使用步骤

    1.Numpy环境安装

    代码如下(示例):

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
    # 使用anaconda的小伙伴也可以用
    conda install numpy
    

    2.引入Numpy库

    import numpy as np
    

    3Nnumpy Ndarray 对象

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

    ndarray 对象是用于存放同类型元素的多维数组。

    ndarray 中的每个元素在内存中都有相同存储大小的区域。

    ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
  • 跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。

    创建一个 ndarray 只需要调用 Numpy 中的 array函数即可:

    numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
    

    参数说明

    名称 描述
    object 数组或嵌套的数列
    dtype 数组元素的数据类型,可选
    copy 对象是否需要复制,可选
    order 创建数组的内存存储样式,C为行方向,F为列方向,A为任意方向(默认)
    subok 默认返回一个与基类类型一致的数组
    ndmin 指定生成数组的最小维度,这里的参数不能改变数组形状

    注:dtype ndmin 参数常用重点记忆

    import numpy as np
    # 一个维度
    a = np.array([1,2,3])
    print(a)# [1 2 3]
    
    # 两个维度
    b = np.array([[1,2,3],[4,5,6]])
    print(b)# [[1 2 3] [4 5 6]]
    
    # 维度设置
    c = np.array([1,2,3,4,5], ndmin=2)
    print(c)# [[1 2 3 4 5]]
    
    # dtype 参数
    d = np.array([1,2,3,4,5], dtype=np.float16)
    print(d)# [1. 2. 3. 4. 5.]
    

    Numpy 数据类型

    numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。
    在使用Numpy库需要指定数据类型时也可以用Python内置的类型,推荐使用Numpy库的类型。
    下表列举了常用 NumPy 基本类型。

    名称 描述
    bool_ 布尔型数据类型(True 或者 False)
    int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
    intc 与 C 的 int 类型一样,一般是 int32 或 int 64
    intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
    int8 字节(-128 to 127)
    int16 整数(-32768 to 32767)
    int32 整数(-2147483648 to 2147483647)
    int64 整数(-9223372036854775808 to 9223372036854775807)
    uint8 无符号整数(0 to 255)
    uint16 无符号整数(0 to 65535)
    uint32 无符号整数(0 to 4294967295)
    uint64 无符号整数(0 to 18446744073709551615)
    float_ float64 类型的简写
    float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
    float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
    float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
    complex_ complex128 类型的简写,即 128 位复数
    complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
    complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)

    Numpy 数组属性

    NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。

    在 NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。比如,二维数组就相当于两个一维数组,其中一维数组的每一个元素又是一个一维数组。所以一维数组就是 NumPy 中的轴(axis),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

    NumPy 的数组中比较重要 ndarray 对象属性有:

    属性 说明
    ndarray.ndim 秩,即轴的数量或维度的数量
    ndarray.shape 数组的维度,对于矩阵,n 行 m 列
    ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
    ndarray.dtype ndarray 对象的元素类型
    ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
    ndarray.flags ndarray 对象的内存信息

    1, ndarray.ndim

    ndarray.ndim 用于返回数组的维度,说实话个人觉得shape也可以看数组维度比ndim函数更好用。

    import numpy as np
    a = np.array([1,2,3])
    print(a.ndim)# 1
    
    b = np.array([[1,2,3]])
    print(b.ndim)# 2
    

    2,ndarray.shape

    ndarray.shape 表示数组的维度,返回一个元组,元组的长度表示维度的数目,元组中的每个元素表示维度中的数组数量。shape在后面作为参数也十分常见。

    也可以用于改变数组的形状。

    import numpy as np
    a = np.array([[1,2,3],[4,5,6]])
    print(a.shape)# (2, 3)
    
    a.shape = (3,2)
    print(a)
    '''
    输出:
    [[1 2]
     [3 4]
     [5 6]]
    '''
    

    在Numpy中也提供了一个reshape函数用来调整数组形状。

    import numpy as np
    a = np.array([[1,2,3],[4,5,6]])
    b = a.reshape(3,2)
    print(b)
    '''
    输出:
    [[1 2]
     [3 4]
     [5 6]]
    '''
    

    3,Numpy 创建数组

    ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建。

    1,numpy.empty

    用来创建指定形状的数组

    numpy.empty(shape, dtype = float, order = 'C')
    

    参数说明

    参数 描述
    shape 数组形状
    dtype 数据类型,可选
    order 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
    import numpy as np
    a = np.empty((2,3), dtype=np.int8)
    # a = np.empty([2,3], dtype=np.int8) 用列表形式创建也可以
    print(a)
    '''
    输出:
    [[-16  70  37]
     [ 82  58   2]]
    '''
    

    注:数组元素为随机值,因为它们没有初始化

    2,numpy.zeros

    创建指定大小的数组,用0来填充。

    numpy.zeros(shape, dtype = float, order = 'C')
    

    参数说明

    参数 描述
    shape 数组形状
    dtype 数据类型,可选
    order ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
    import numpy as np
    # 默认为浮点型
    a = np.zeros((3,3))
    print(a)
    '''
    输出:
    [[0. 0. 0.]
     [0. 0. 0.]
     [0. 0. 0.]]
    '''
    # 转为整型
    a = np.zeros((3,3), dtype=np.int8)
    print(a)=
    

    3,numpy.ones

    创建指定大小的数组,用1来填充。

    numpy.ones(shape, dtype = None, order = 'C')
    

    参数说明

    参数 描述
    shape 数组形状
    dtype 数据类型,可选
    order ‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组
    import numpy as np
    a = np.ones((3,3))
    print(a)
    '''
    输出:
    [[1. 1. 1.]
     [1. 1. 1.]
     [1. 1. 1.]]
    '''
    # 默认为浮点型
    a = np.ones((3,3), dtype=np.int8)
    print(a)
    # 转为整型
    

    4、numpy.zeros_like

    numpy.zeros 可以直接指定要创建的数组的形状,而 numpy.zeros_like 则是创建一个与给定数组具有相同形状的数组。

    numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)
    

    参数说明

    参数 描述
    a 给定要创建相同形状的数组
    dtype 创建的数组的数据类型
    order 数组在内存中的存储顺序,可选值为 ‘C’(按行优先)或 ‘F’(按列优先),默认为 ‘K’(保留输入数组的存储顺序)
    subok 是否允许返回子类,如果为 True,则返回一个子类对象,否则返回一个与 a 数组具有相同数据类型和存储顺序的数组
    shape 创建的数组的形状,如果不指定,则默认为 a 数组的形状。
    import numpy as np
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    b = np.zeros_like(a)
    print(b)
    '''
    输出:
    [[0 0 0]
     [0 0 0]
     [0 0 0]]
    '''
    

    5、numpy.ones_like

    numpy.ones 可以直接指定要创建的数组的形状,而 numpy.ones_like 则是创建一个与给定数组具有相同形状的数组。

    numpy.ones_like(a, dtype=None, order='K', subok=True, shape=None)
    

    参数说明

    参数 描述
    a 给定要创建相同形状的数组
    dtype 创建的数组的数据类型
    order 数组在内存中的存储顺序,可选值为 ‘C’(按行优先)或 ‘F’(按列优先),默认为 ‘K’(保留输入数组的存储顺序)
    subok 是否允许返回子类,如果为 True,则返回一个子类对象,否则返回一个与 a 数组具有相同数据类型和存储顺序的数组
    shape 创建的数组的形状,如果不指定,则默认为 a 数组的形状。
    import numpy as np
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    b = np.ones_like(a)
    print(b)
    '''
    输出:
    [[1 1 1]
     [1 1 1]
     [1 1 1]]
    '''
    

    4,NumPy 从已有的数组创建数组

    1、numpy.asarray

    numpy.asarray 类似 numpy.array,但 numpy.asarray 参数只有三个,比 numpy.array 少两个。

    numpy.asarray(a, dtype = None, order = None)
    

    参数说明

    参数 描述
    a 任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
    dtype 数据类型,可选
    order 可选,有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。
    import numpy as np
    # 将列表转换为数组
    x1 = [1,2,3,4,5]
    a1 = np.asarray(x1)
    print(a1)
    
    # 将元组转换为数组
    x2 = (1,2,3,4,5)
    a2 = np.asarray(x2)
    print(a2)
    
    # 将列表元组转换为数组,元素必须对齐
    x3 = [(1,2,3),(4,5,6)]
    a3 = np.asarray(x3)
    print(a3)
    

    2、numpy.fromiter

    numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。

    numpy.fromiter(iterable, dtype, count=-1)
    

    参数说明

    参数 描述
    iterable 可迭代对象
    dtype 返回数组的数据类型
    count 读取的数据数量,默认为-1,读取所有数据
    import numpy as np
    # 创建一个列表
    list1 = range(5)
    it=iter(list)
    # 使用迭代器创建 ndarray
    arr = np.fromiter(it, dtype=np.float16, count=3)
    print(arr)# 输出[0. 1. 2.]
    

    5,NumPy 从数值范围创建数组

    1,numpy.arange

    numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下:

    numpy.arange(start, stop, step, dtype)
    

    参数说明

    参数 描述
    start 起始值,默认为0
    stop 终止值(不包含)
    step 步长,默认为1
    dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
    import numpy as np
    # 创建一个0-4的数组
    arr = np.arange(5)
    print(arr)
    
    # 设置步长和类型
    arr1 = np.arange(10,20,2, dtype=np.float16)
    print(arr1)
    

    2,numpy.linspace

    numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:

    np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    

    参数说明

    参数 描述
    start 序列的起始值
    stop 序列的终止值,如果endpointtrue,该值包含于数列中
    num 要生成的等步长的样本数量,默认为50
    endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
    retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。
    dtype ndarray 的数据类型
    import numpy as np
    # 创建一个1-10的等差数列数组,不设置值时默认为浮点型
    arr = np.linspace(1,10,10)
    print(arr)# [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
    
    # 生成一个全为一的等差数列数组
    arr1 = np.linspace(1,1,10)
    print(arr1)
    
    # 设置endpoint 为 False 返回数组不包含 stop 的值
    arr2 = np.linspace(1,11,10, endpoint=False)
    print(arr2)# [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]不包含11
    
    # 生成10个等间距的数列,并且会返回步长
    arr3 = np.linspace(1,10,10, retstep=True)
    print(arr3)# (array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.]), 1.0)
    

    总结

    以上就是关于Numpy的简单介绍,以及Numpy中数组创建的相关操作。
    接下来我会继续介绍关于Numpy的相关操作,作者也在学习中有错误望指正,谢谢。

    作者:Rhryal

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中Numpy库学习指南(第一篇)

    发表回复