【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作

目录

一、前言

二、实验环境

三、NumPy

0、多维数组对象(ndarray)

多维数组的属性

1、创建数组

2、数组操作

3、数组数学

4、数组广播

5、排序操作

1. np.sort() 函数

2. np.argsort() 函数

3. ndarray.sort() 方法

4. 按列或行排序

5. np.lexsort() 函数

6. np.partition() 函数

7. np.argpartition() 函数

8. ndarray.argsort() 方法


一、前言

        Python是一种高级编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名,并且具有强大的功能和广泛的应用领域。Python具有丰富的标准库和第三方库,可以用于开发各种类型的应用程序,包括Web开发、数据分析、人工智能、科学计算、自动化脚本等。

        Python本身是一种伟大的通用编程语言,在一些流行的库(numpy,scipy,matplotlib)的帮助下,成为了科学计算的强大环境。本系列将介绍Python编程语言和使用Python进行科学计算的方法,主要包含以下内容:

  • Python:基本数据类型、容器(列表、元组、集合、字典)、函数、类
  • Numpy:数组创建、数组操作、数组数学、广播
  • Matplotlib:绘图风格和类型、图表自定义、多子图和布局
  • IPython:创建笔记本、典型工作流程

 二、实验环境

matplotlib3.5.3
numpy1.21.6
python3.7.16
  • 运行下述命令检查Python版本
 python --version 
  • 运行下述代码检查Python、NumPy、Matplotlib版本
import sys
import numpy as np
import matplotlibprint("Python 版本:", sys.version)
print("NumPy 版本:", np.__version__)
print("matplotlib 版本:", matplotlib.__version__)

三、NumPy

        NumPy(Numerical Python)是一个用于科学计算的Python库。它提供了一个强大的多维数组对象(ndarray),用于进行高效的数值运算和数据处理。Numpy的主要功能包括:

  1. 多维数组:Numpy的核心是ndarray对象,它是一个多维数组,可以存储同类型的元素。这使得Numpy非常适合处理向量、矩阵和其他多维数据结构。

  2. 数学函数:Numpy提供了许多常用的数学函数,如三角函数、指数函数、对数函数等。这些函数可以直接应用于整个数组,而无需编写循环。

  3. 广播(Broadcasting):Numpy支持不同形状的数组之间的运算,通过广播机制,可以对形状不同的数组进行逐元素的操作,而无需显式地编写循环。

  4. 线性代数运算:Numpy提供了丰富的线性代数运算函数,如矩阵乘法、求解线性方程组、特征值计算等。

  5. 随机数生成:Numpy包含了用于生成各种概率分布的随机数的函数,如均匀分布、正态分布、泊松分布等。

  6. 数据操作:Numpy提供了很多用于操作数组的函数,如切片、索引、排序、去重等。

        Numpy广泛应用于科学计算、数据分析、机器学习等领域。它的高效性和便捷性使得它成为Python数据科学生态系统中不可或缺的组成部分。

0、多维数组对象(ndarray)

        NumPy的ndarray对象是NumPy库中最重要的对象之一,也是进行科学计算的核心数据结构。ndarray代表了一个多维的数组,可以存储相同类型的元素。

多维数组的属性

  • ndarray.shape:返回表示数组形状的元组,例如(2, 3)表示2行3列的数组。
  • ndarray.dtype:返回数组中元素的数据类型,例如intfloatbool等。
  • ndarray.ndim:返回数组的维度数,例如1表示一维数组,2表示二维数组。

1、创建数组

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132782221?spm=1001.2014.3001.5501

2、数组操作

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)_QomolangmaH的博客-CSDN博客https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501

3、数组数学

【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/132863360?spm=1001.2014.3001.5501

4、数组广播

        NumPy广播(Broadcast)是指在不同形状的数组之间进行运算的一种机制。它允许我们在不显式复制数据的情况下,对具有不同形状的数组进行逐元素的操作。广播可以使我们更方便地进行数组运算,提高代码的简洁性和效率。

在进行广播运算时,NumPy遵循一套严格的规则:

  •  数组维度不同时,将维度较小的数组进行扩展,使其与维度较大的数组具有相同的维度数。

  • 如果两个数组在某个维度上的形状相等,或其中一个数组在该维度上的形状为1,则认为它们在该维度上是兼容的。

  • 如果两个数组在所有维度上都是兼容的,它们可以一起进行广播。

  • 在广播中,沿着形状中为1的维度进行复制,以使两个数组具有相同的形状。 

        广播的过程是自动进行的,无需显式编写循环或复制数据。让我们通过一个具体的示例来说明广播的工作原理:

import numpy as np# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])# 进行广播运算
c = a + b
print(c)

        在这个例子中,数组a的形状是(3,),数组b的形状是(2, 3)。根据广播的规则,a的形状会被扩展为(2, 3),然后两个数组逐元素相加,得到结果数组c。输出结果如下:

[[ 5  7  9][ 8 10 12]]

        通过广播,我们可以在不改变数组形状的情况下,对不同形状的数组进行逐元素的操作。这使得我们可以更灵活地处理数据,并编写更简洁的代码。需要注意的是,虽然广播可以方便地进行数组运算,但在某些情况下可能会引起歧义或错误的结果。因此,在使用广播时,建议仔细理解广播规则,并确保操作的正确性。

5、排序操作

1. np.sort() 函数

        该函数返回一个数组的排序副本

import numpy as npa = np.array([3, 1, 4, 2, 5])# 对数组进行排序
b = np.sort(a)
print(b)
# 输出: [1 2 3 4 5]

2. np.argsort() 函数

        该函数返回数组排序后的索引。

import numpy as npa = np.array([3, 1, 4, 2, 5])# 返回排序后的索引
indices = np.argsort(a)
print(indices)
# 输出: [1 3 0 2 4]

3. ndarray.sort() 方法

        该方法原地对数组进行排序,不返回副本。

import numpy as npa = np.array([3, 1, 4, 2, 5])# 原地对数组进行排序
a.sort()
print(a)
# 输出: [1 2 3 4 5]

4. 按列或行排序

        可以指定 axis 参数来按列或行对二维数组进行排序。

import numpy as npa = np.array([[3, 1, 4], [2, 5, 0]])# 按列排序
b = np.sort(a, axis=0)
print(b)
# 输出:
# [[2 1 0]
#  [3 5 4]]# 按行排序
c = np.sort(a, axis=1)
print(c)
# 输出:
# [[1 3 4]
#  [0 2 5]]

5. np.lexsort() 函数

        该函数根据键的字典顺序对多个序列进行间接排序。

import numpy as npa = np.array([[3, 1, 4], [2, 5, 0]])
names = np.array(['Tom', 'John'])# 使用lexsort进行间接排序
indices = np.lexsort((names, a[:, 0]))
print(indices)
# 输出: [1 0]sorted_data = a[indices]
print(sorted_data)
# 输出:
# [[2 5 0]
#  [3 1 4]]

6. np.partition() 函数

        该函数可以在数组中进行分区操作,将数组分割为满足指定条件的两个部分。分区后,左侧的元素都小于或等于右侧的元素,但它们之间的顺序是未定义的。

import numpy as npa = np.array([3, 1, 4, 2, 5])# 对数组进行分区
b = np.partition(a, 2)
print(b)
# 输出: [1 2 3 4 5]

7. np.argpartition() 函数

        该函数返回分区操作后的索引 

import numpy as npa = np.array([3, 1, 4, 2, 5])# 返回分区后的索引
indices = np.argpartition(a, 2)
print(indices)
# 输出: [1 3 0 2 4]

8. ndarray.argsort() 方法

        该方法返回数组排序后的索引,类似于 np.argsort() 函数。

import numpy as npa = np.array([3, 1, 4, 2, 5])# 返回排序后的索引
indices = a.argsort()
print(indices)
# 输出: [1 3 0 2 4]

9. np.searchsorted() 函数

        该函数用于在已排序的数组中查找指定元素应该插入的位置,以9.保持排序顺序。

import numpy as npa = np.array([1, 3, 4, 4, 6])# 查找元素应该插入的位置
index = np.searchsorted(a, 5)
print(index)
# 输出: 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis 映射器中使用@InsertProvider,@UpdateProvider,@DeleteProvider,@SelectProvider

上一篇我们介绍了在Mybatis映射器的映射方法中使用Param接收多个参数;本篇我们继续介绍如何在Mybatis的映射器中使用动态SQL。 如果您对Mybatis映射器的映射方法中使用Param接收多个参数不太了解,建议您先进行了解后再阅读本篇,可以参考&…

【Java 基础篇】Java 多线程详解

多线程是 Java 编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的性能和响应能力。本篇博客将深入探讨 Java 多线程,从基础概念到实际应用,适用于 Java 初学者和希望深入了解多线程的开发人员。 什么是多线程&#…

Vue之路由及Node.js环境搭建(一起探索新事物)

目录 ​编辑 前言 一、Vue之路由 1.路由简介 1.1 什么是路由 1.2 什么是SPA 1.3 SPA的实现思路 1.4 使用路由的优势 2. 案例演示 2.1 导入所需的js文件 2.2 编写案例代码(模拟页面跳转) 二、Vue之node.js 1. node.js简介 1.1 什么是node.j…

ubuntu 18.04 中 eBPF samples/bpf 编译

1. history 信息 一次成功编译 bpf 后执行 history 得到的信息: yingzhiyingzhi-Host:~/ex/ex_kernel/linux-5.4$ history1 ls2 mkdir ex3 cd ex4 mkdir ex_kernel5 ls /boot/6 sudo apt install linux-source7 ls /usr/src/8 uname -r9 cd ex_kernel/10…

postman记录backup

之前一直未登录postman,在临时空间处理请求,可能是因为postman更新了,导致其记录没了 别着急! 首先我们先登录postman,有谷歌登录方式等 第一步、登录后点击import 第二步、点击files 第三步、找到c:/users/AppData…

20-SpringCloudAlibaba-2

六 分布式流量防护 1 认识分布式流量防护 在分布式系统中,服务之间的相互调用会生成分布式流量。如何通过组件进行流量防护,并有效控制流量,是分布式系统的技术挑战之一。 什么是服务雪崩 假设我有一个微服务系统,这个系统内包…

【WinForm】WinForm窗体程序如何一直运行在屏幕的最前方

文章目录 前言一、新建一个项目二、完整代码三、收起程序总结 前言 程序一致运行在其他软件的最前方,比如让WinForm窗体程序一致运行在微信的最前面。 WinForm窗体程序如何一直运行在屏幕的最前方 一、新建一个项目 新建一个WinForm程序 设置最大化为true&…

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据...

全文链接:http://tecdat.cn/?p24456 如果你正在进行统计分析:想要加一些先验信息,最终你想要的是预测。所以你决定使用贝叶斯(点击文末“阅读原文”获取完整代码数据)。 相关视频 但是,你没有共轭先验。你…

数据结构与算法:排序算法(1)

目录 冒泡排序 思想 代码实现 优化 鸡尾酒排序 优缺点 适用场景 快速排序 介绍 流程 基准元素选择 元素交换 1.双边循环法 使用流程 代码实现 2.单边循环法 使用流程 代码实现 3.非递归实现 排序在生活中无处不在,看似简单,背后却隐藏…

【漏洞复现】JumpServer未授权访问漏洞(CVE-2023-42442)

文章目录 前言声明一、JumpServer简介二、漏洞描述三、影响范围四、资产搜索五、漏洞复现六、修复建议 前言 JumpServer的权限管理存在缺陷,未经授权的远程攻击者可以下载历史会话连接期间的所有操作日志,可导致敏感信息泄漏。 声明 请勿利用文章内的…

Mybatis懒加载

懒加载是什么? 按需加载所需内容,当调用到关联的数据时才与数据库交互否则不交互,能大大提高数据库性能,并不是所有场景下使用懒加载都能提高效率。 Mybatis懒加载:resultMap里面的association、collection有延迟加载功…

视频文本检索(ICCV 23):Unified Coarse-to-Fine Alignment for Video-Text Retrieval

论文作者:Ziyang Wang,Yi-Lin Sung,Feng Cheng,Gedas Bertasius,Mohit Bansal 作者单位:UNC Chapel Hill 论文链接:http://arxiv.org/abs/2309.10091v1 项目链接:https://github.com/Ziyang412/UCoFiA 内容简介: …

Win10专业版开启远程桌面

Win10专业版开启远程桌面 方法一: 一、按“Win R”键,然后输入“sysdm.cpl”并按下回车键打开系统属性。 二、选择“远程”选项卡,在远程桌面中勾选“允许远程连接到此计算机”就可以开启远程桌面; 方法二: 一、打…

评价指标分类

声明 本文是学习GB-T 42874-2023 城市公共设施服务 城市家具 系统建设实施评价规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了城市家具系统建设实施的评价原则、评价流程,给出了评价指标,描述了 方…

visual studio 安装包丢失或损坏

visual studio 安装包丢失或损坏 如下图所示为vs2015报错信息。 解决方案: 找到镜像文件或者压缩包的解压位置; 路径:C:\Users\Administrator\Desktop\packages 复制该路径至上图的请提供搜索包的位置。

如何自动获取短信验证码?

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ 这篇文章通过解决实际项目开发中遇到的如何自动获取短信验证码的问题,进一步讲述在Java中如何使用正则。 Java中如何使用正则 Java中正则相关类位于java.util.r…

新款 锐科达 SV-2102VP SIP广播音频模块 RTP流音频广播

新款 锐科达 SV-2102VP SIP广播音频模块 RTP流音频广播 SV-2102VP和 SV-2103VP网络音频模块是一款通用的独立SIP音频功能模块,可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。 本系列模块可以应用于以下领域: • 各种商…

selenium自动化测试-登录网站用户

昨天学习了selenium自动化测试工具的入门,知道了Selenium是用于自动化控制浏览器做各种操作,打开网页,点击按钮,输入表单等等。 今天学习通过selenium自动化测试工具自动登录某网站用户操作。 第一步:确定目标网址 …

【C++进阶】:哈希

哈希 一.unordered_map二.底层结构1.哈希概念2.解决哈希冲突1.闭散列2.开散列 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 l o g 2 N log_2N log2​N,即最差情况下需要比较红黑树的高度次,当树中的…

【C++面向对象侯捷】4.参数传递与返回值

文章目录 构造函数放在 private?>单例模式 const member functions(常量成员函数) > 不会改变数据内容的,加上const参数传递:pass by value vs. pass by reference(to const)【最好传引用,占用空间小】返回值传递&#xff1…