首页 > 其他分享 >科学计算库NumPy

科学计算库NumPy

时间:2022-09-29 13:57:03浏览次数:46  
标签:运算 科学计算 元素 数组 NumPy ndarray 函数

科学计算库NumPy

目录

一. 简单介绍

  • NumPy是Python开源的数值计算扩展工具,它提供了Python对多维数组的支持,能够支持高级的维度数组与矩阵运算。此外,针对数组运算也提供了大量的数学函数库。NumPy是大部分Python科学计算的基础,它具有以下功能:
    1. 快速高效的多维数据对象ndarray。
    2. 高性能科学计算和数据分析的基础包。
    3. 多维数组(矩阵)具有矢量运算能力,快速且节省空间。
    4. 矩阵运算。无需循环即可完成类似Matlab中的矢量运算。
    5. 线性代数、随机数生成以及傅里叶变换功能。

二. 认识NumPy数组对象

  • NumPy中最重要的一个特点就是其N维数组对象,即ndarray(别名array)对象,该对象具有矢量算术能力和复杂的广播能力,可以执行一些科学计算。不同于Python标准库,ndarray对象拥有对高维数组的处理能力,这也是数值计算中缺一不可的重要特性。

  • ndrray对象中定义了一些重要的属性:

    属性 具体说明
    ndarray.ndim 维度个数, 也就是数组轴的个数
    ndarray.shape 数组的维数, 就是一个整数的元组, 表示每个维度上的数组大小
    ndarray.size 数组元素得总个数, 等于shape属性中元祖元素得乘积
    ndarray.dtype 描述数组中元素类型的对象, 即可以使用标准库的Python类型创建和指定, 也可以使用NumPy特有的数据类型来指定
    ndarray.itemsize 数组中每个元素的字节大小
  • 注意: ndarray对象中储存的元素的类型必须是相同的

  • ndarray对象的使用实例:

    image-20220922204615420
    • arange()函数是生成一系列的数字元素的数组, reshape()函数是重组数组的行数, 列数, 维度

三. 创建NumPy数组

  • 创建NumPy对象的方式有若干种, 其中最简单的就是使用array()函数, 在调用该函数时传入一个Python现有的类型即可

    image-20220922205634957
  • 通过zeros()函数创建元素值都为0的数组

    image-20220923090652379
  • 通过ones()函数创建元素值都是1的数组

image-20220923090748230
  • 通过empty()函数创建一个新的数组, 该数组只分配了内存空间, 它填充的元素是随机的, 类型为float64

    image-20220923091052940
  • 通过arange()函数可以创建一个等差数组, 它的功能类似于range(), 只不过arange()函数返回的是数组, 而不是列表

    image-20220923091558412
  • 可以看出来有点数字后边会有小数点.有的没有, 这算是因为元素数据类型不相同所导致的

  • 创建ndarray对象时, 可以指定其元素的类型

image-20220923092005198

四. ndarray对象的数据类型

1. 查看数据类型

  • 通过ndarray.dtype可以创建一个表示数据的对象, 想要获取数据类型的名称, 则需要访问name属性进行获取

    image-20220923093545705

  • NumPy的数据类型是有一个类型名和元素位长的数字组成的

  • NumPy中常见的数据类型:

    image-20220923094339488

  • 每一个NumPy内置的数据类型都有一个特征码, 它能唯一标识一种数据类型

    image-20220923094520530

2. 转换数据类型

  • ndarray对象的2数据类型可以通过astype()方法进行转换

image-20220923095138439

五. 数组运算

  • NumPy数组不需要循环遍历,即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化运算。不过,如果两个数组的大小(ndarray.shape)不同,则它们进行算术运算时会出现广播机制。除此之外,数组还支持使用算术运算符与标量进行运算。

1. 矢量化运算

  • 在NumPy中, 大小相同的数组之间的任何算术运算都会应用到元素级, 即只用于位置相同的元素之间, 所得到的运算结果组成一个新的数组

    image-20220923100124934

image-20220923100418105

2. 数组广播

  • 数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样就可以进行矢量化运算了。

    image-20220926164903642
  • 数组广播机制:

    image-20220926165020212

  • 注意:广播机制实现了对两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可。

    1. 数组的某一维度等长。
    2. 其中一个数组的某一维度为1。
  • 广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。

3. 数组与标量之间的运算

  • 数组与标量之间的运算会将那个表量传播到各个元素。标量运算会产生一个与数组具有相同数量的行和列的新矩阵, 其原来矩阵的每个元素被相做运算

六. ndarray的索引和切片

1. 整数索引和切片的基本使用

  • ndarray对象的元素可以通过索引和切片来访问和使用, 就像Python内置的容器对象一样

    image-20220926170049025
  • 对于多维数组来说索引和切片的使用方式就不一样了(就是二维/多维数组的索引或切片使用)

image-20220926171139259

2. 花式索引的基本使用

  • 花式索引是NumPy的一个术语,是指将整数数组或列表作为索引,然后根据索引数组或索引列表的每个元素作为目标数组的下标再进行取值。

  • 当使用一维数组或列表作为索引时,如果使用索引要操作的目标对象是一维数组,则获取的结果是对应下标的元素;如果要操作的目标对象是一个二维数组,则获取的结果就是对应下标的一行数据。

  • image-20220926185259096

3. 布尔型索引的基本使用

  • 布尔型索引指的是将一个布尔数组作为数组索引, 返回数据是布尔数组中True对应的位置

    image-20220926190348602

  • 我们还可以将布尔型索引数组跟切片混合使用

    image-20220926190633283

  • 注意: 除了可以使用==运算符还可以使用 !=,和 -来否定, 也可以使用 &| 等符号来组合多个布尔条件

七. 数组的转置和轴对称

  • 数组的转置是指将数组中的每个元素按照一定的规律进行位置变换
  1. T 属性 : 对数组进行轴对换(行变列, 列边行)

    image-20220926192700194

    1. transpose()方法 : 需要得到一个由轴编号组成的元组才能对这些轴进行转置

      image-20220926194214609

      transpose()方法的默认值为(2, 1, 0), 即直接调用不加参数

  2. swapaxes()方法 : 只转换其中的两个轴

    image-20220926194620505

  • 在NumPy中维度(dimensions)叫做轴(axes), 轴的个数叫做秩(rank), 例如 在3D空间中有个点的坐标[1, 2, 1]是一个秩为 1 的数组, 因为他只有一个轴, 这个轴有三个元素, 所以说它的长度为 3

八. NumPy通用函数

  • 在NUmPy,提供了诸如“sin”、“cos”和“exp”等常见的数学函数,这些函数叫做通用函数(ufnc)。通用函数是一种针对ndarray中的数据执行元素级运算的函数,函数返回的是一个新的数组。通常情况下,我们将ufunc中接收一个数组参数的函数称为一元通用函数,而接收两个数组参数的则称为二元通用函数。
  • 常见一元通用函数 : image-20220926195918841

image-20220926200300685

  • 常见的二元通用函数 : image-20220926200023708

image-20220926200539496

九. 利用NumPy数组进行数据处理

1. 将条件逻辑转化为数组运算

  • NumPy的where()函数是三元表达式 x if condition else y 的矢量化版本

    image-20220928133621728

  • where() 函数

    • 参数一: 要判断的条件, 可以是一个布尔值, 可以使一个数组
    • 参数二: 条件成立时获取arr1相应位置的值
    • 参数三 : 当不满足条件时, 获取arr2相对位置的值
    • 返回值: 一个新数组

2. 数组统计运算

  • NumPy数组中与统计运算相关的方法

    方法 描述
    sum 对数组中全部或是某个轴的元素进行求和
    mean 算数平均值
    min 计算数组中的最小值
    max 计算数组中的最大值
    argmin 表示最小值的索引
    argmax 表示最大值得的索引
    cumsum 所有元素的累计和
    cumprod 所有元素的累计差

    注意: 使用ndarray对象调用方法cumsum()和cumprod()方法后, 会产生一个结果是一个由中间结果组成的数组

image-20220928134923010

3. 数组排序

  • 对数组中的元素进行排序, 可以通过 sort() 方法实现

    image-20220928135525311

    • sort()方法对原数组进行了排序
  • 对一个轴上的元素进行排序

    image-20220928135825758

4. 检索数组元素

  • 在NumPy中, all()函数用于判断整个数组中的元素的值是否全部满足条件, 如果满足条件则会返回True, 否则返回False
  • 在NumPy中, any()函数用于判断整个数组中的元素至少有一个满足条件就返回True, 否则返回False
  • image-20220928141709285

5. 唯一化及其他集合逻辑

  • 针对一维数组, NumPy提供了unique()函数来找出数组中的唯一值, 并返回排序后的结果

    • image-20220928142100133
  • in1d()函数用于判断数组中的元素是否在另一个数组中中存在, 该函数返回的是一个布尔型数组

    • image-20220928142223220

      注意: in1d()中的1是数字 1

  • 数组集合运算的常见函数

    函 数 描 述
    nuique(x) 计算x中的元素, 并返回有序结果
    intersect1d(x, y) 计算x与y中的公共元素, 并返回有序结果
    union1d(x, y) 计算x与y的并集, 并返回有序结合
    in1d(x, y) 得到一个"x的元素是否包含y"的布尔型数组
    setdiff1d(x, y) 集合的差, 即元素在x中且不再y中
    setxor1d(x, y) 集合的对称差, 即存在一个数组中的但不同时存在于两个数组中的元素

十. 线性代数模块

  • 线性代数是数学运算中的一个重要工具,它在图形信号处理、音频信号处理中起非常重要的作用。numpy.linalg模块中有一组标准的矩阵分解运算以及诸如逆和行列式之类的东西。例如,矩阵相乘,如果通过“*” 对两个数组相乘,得到的是一个 元素级的积, 而不是一个矩阵点积。

  • NumPy中提供了一个用于矩阵乘法的dot()方法

    • image-20220928144245631
  • linalg模块的常见函数

函数 描述
dot 矩阵乘法
diag 以一维数组的形式返回方阵的对角线, 或将一维数组转化为方阵
trace 计算对角线元素和
det 计算矩阵的行列式
eig 计算方阵的特征值和特征向量
inv 计算方针的逆
qr 计算qr分解
svd 计算奇异值(SVD)
solve 解线性方程组 $Ax=b$,其中$A$是一个方阵
lstsq 计算$Ax=b$的最小二乘解

十一. 随机数模块

  • 与Python的random模块相比, NumPy的random模块功能更多, 它增加了一些可以高效生成多种概率分布的样本值得函数

    image-20220928150726947

  • random模块的常见函数

    函数 描述
    seed 生成随机种子
    rand 产生均匀分布的样本值
    randint 从给定的上下限范围内随机选取整数
    normal 产生正态分布的样本值
    beta 产生Beta分布的样本值
    uniform 产生[0, 1]中的均匀分布的样本值

十二. 案例----酒鬼漫步

image-20220929133926770

标签:运算,科学计算,元素,数组,NumPy,ndarray,函数
From: https://www.cnblogs.com/varfa/p/16741220.html

相关文章

  • 25. NumPy和Matplotlib绘图
    1.前言Matplotlib是Python的绘图库,它经常与NumPy一起使用,从而提供一种能够代替Matlab的方案。不仅如此Matplotlib还可以与PyQt和wxPython等图形工具包一起......
  • 24. NumPy矩阵乘法
    1.前言矩阵乘法是将两个矩阵作为输入值,并将A矩阵的行与B矩阵的列对应位置相乘再相加,从而生成一个新矩阵,如下图所示:注意:必须确保第一个矩阵中的行数等于第二个矩阵中......
  • mitudesk的numpy日记 赋值与切片
    1.赋值与切片,就是按照惯常的方式去赋值,去切片,和之前的list切片很像2.高级索引第一种就是直接二维数组的方式,直接通过[1][1]的这种形式来访问第二种是通过元组的固定坐标......
  • 20. NumPy副本和视图
    1.前言对NumPy数组执行些函数操作时,其中一部分函数会返回数组的副本,而另一部分函数则返回数组的视图。本节对数组的副本和视图做重点讲解。其实从内存角度来说,副本就是......
  • numpy
    numpy特点:numpy的方法比python快10到100倍内存也少多维数组对象ndarraynd表示多维的array意思是数组生成数组:array接受序列型对象,生成数组arr2=np.array(d......
  • mitudesk的numpy 日记 基础
    1。定义np是一个模块类型是classmoudlen=np.array(类np,dtype='')后面的是参数的限制问题,可以选择intstrfloat等2.关于对角函数eye,其在输出str模式时不会输出'0',而......
  • 18. NumPy统计函数
    1.前言NumPy提供了许多统计功能的函数,比如查找数组元素的最值、百分位数、方差以及标准差等。2.numpy.amin()和numpy.amax()这两个函数用于计算数组沿指定轴的最......
  • 17. NumPy算术运算
    1.前言NumPy数组的“加减乘除”算术运算,分别对应add()、subtract()、multiple()以及divide()函数。注意:做算术运算时,输入数组必须具有相同的形状,或者符合数组的广......
  • 15. NumPy字符串处理函数
    1.前言NumPy提供了许多字符串处理函数,它们被定义在用于处理字符串数组的numpy.char这个类中,这些函数的操作对象是string_或者unicode_字符串数组。如下表所示:Num......
  • 14. NumPy位运算
    1.前言本节重点讲解NumPy的位运算,NumPy中提供了以下按位运算函数:numpy按位运算函数序号函数位运算符描述说明1bitwise_and&计算数组元素之间的按位与运算。......