【深度学习】 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:创建笔记本,典型工作流程
二、实验环境
numpy | 1.21.6 | |
python | 3.7.16 |
- 运行下述命令检查Python版本
python --version
- 运行下述代码检查Python、NumPy版本
import sys
import numpy as npprint("Python 版本:", sys.version)
print("NumPy 版本:", np.__version__)
三、NumPy
NumPy(Numerical Python)是一个用于科学计算的Python库。它提供了一个强大的多维数组对象(ndarray),用于进行高效的数值运算和数据处理。Numpy的主要功能包括:
多维数组:Numpy的核心是ndarray对象,它是一个多维数组,可以存储同类型的元素。这使得Numpy非常适合处理向量、矩阵和其他多维数据结构。
数学函数:Numpy提供了许多常用的数学函数,如三角函数、指数函数、对数函数等。这些函数可以直接应用于整个数组,而无需编写循环。
广播(Broadcasting):Numpy支持不同形状的数组之间的运算,通过广播机制,可以对形状不同的数组进行逐元素的操作,而无需显式地编写循环。
线性代数运算:Numpy提供了丰富的线性代数运算函数,如矩阵乘法、求解线性方程组、特征值计算等。
随机数生成:Numpy包含了用于生成各种概率分布的随机数的函数,如均匀分布、正态分布、泊松分布等。
数据操作:Numpy提供了很多用于操作数组的函数,如切片、索引、排序、去重等。
Numpy广泛应用于科学计算、数据分析、机器学习等领域。它的高效性和便捷性使得它成为Python数据科学生态系统中不可或缺的组成部分。
0、多维数组对象(ndarray)
NumPy的ndarray
对象是NumPy库中最重要的对象之一,也是进行科学计算的核心数据结构。ndarray
代表了一个多维的数组,可以存储相同类型的元素。
多维数组的属性
ndarray.shape
:返回表示数组形状的元组,例如(2, 3)
表示2行3列的数组。ndarray.dtype
:返回数组中元素的数据类型,例如int
、float
、bool
等。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.5501https://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.5501https://blog.csdn.net/m0_63834988/article/details/132830547?spm=1001.2014.3001.5501
3、数组数学
【深度学习】 Python 和 NumPy 系列教程(十一):NumPy详解:3、数组数学(元素、数组、矩阵级别的各种运算)_QomolangmaH的博客-CSDN博客https://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
相关文章:
【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作
目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 4、数组广播 5、排序操作 1. np.sort() 函数 2. np.argsort() 函数 3. ndarray.sort() 方法 4. 按列或行排序 5. n…...
CSS宽度问题
一、魔法 为 DOM 设置宽度有哪些方式呢?最常用的是配置width属性,width属性在配置时,也有多种方式: widthmin-widthmax-width 通常当配置了 width 时,不会再配置min-width max-width,如果将这三者混合使…...
浅谈C++|STL之string篇
一.string的基本概念 本质 string是C风格的字符串,而string本质是一个字符串 string和char * 区别 char * 是一个指针string是一个类,类内部封装了char *,管理这个字符串,是一个char * 型容器。 特点 string类内部封装了很多成…...
Kubernetes Dashboard安装部署
Kubernetes Dashboard安装部署 1. 下载Dashboard 部署文件2. 修改yaml配置文件3. 应用安装,查看pod和svc4. 创建dashboard服务账户5. 创建admin-user用户的登录密钥6. 登录6.1 使用token登录(1) 短期token(2) token长期有效 6.2 使用 Kubeconfig 文件登录 7.安装met…...
在Qt的点云显示窗口中添加坐标轴C++
通过摸索整理了三个方法: 一、方法1://不推荐,但可以参考 1、通过pcl的compute3DCentroid()方法计算点云的中心点坐标; 函数原型如下: compute3DCentroid (const pcl::PointCloud<PointT> &cloud, Eigen…...
[密码学入门]凯撒密码(Caesar Cipher)
密码体质五元组:P,C,K,E,D P,plaintext,明文空间 C,ciphertext,密文空间 K,key,密钥空间 E,encrypt,加密算法 D,decrypt,解密算法 单表代换…...
uboot 顶层Makefile-make xxx_deconfig过程说明三
一. uboot 的 make xxx_deconfig配置 本文接上一篇文章的内容。地址如下:uboot 顶层Makefile-make xxx_deconfig过程说明二_凌肖战的博客-CSDN博客 本文继续来学习 uboot 源码在执行 make xxx_deconfig 这个配置过程中,顶层 Makefile有关的执行思路。 …...
c++中的多线程通信
信息传递 #include <iostream> #include <thread> #include <chrono> #include <mutex> #include <condition_variable> #include <queue> // 用于存储和同步数据的结构 struct Data {std::queue<std::string> messag…...
IO day7
1->x.mind 2-> A进程 B进程...
C语言之指针进阶篇(3)
目录 思维导图 回调函数 案例1—计算器 案例2—qsort函数 关于qsort函数 演示qsort函数的使用 案例3—冒泡排序 整型数据冒泡排序 回调函数搞定各类型冒泡排序 cmp_int比较大小 cmp传参数 NO1. NO2. 解决方案 交换swap 总代码 今天我们学习指针难点之回调函数…...
SQL7 查找年龄大于24岁的用户信息
描述 题目:现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。 用户信息表:user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20…...
vite搭建vue3项目
参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令:npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…...
Qt中表格属性相关操作,调整表格宽度高度自适应内容等
1 表格列宽设置 利用Qt designer设计,可以通过改变表头的列宽从而保证内容不会被遮盖,输入空格的方式增加表头的长度,比如表头为"Value",则改成"Value ",可以扩展列默认的宽度,保证后面…...
NLP机器翻译全景:从基本原理到技术实战全解析
目录 一、机器翻译简介1. 什么是机器翻译 (MT)?2. 源语言和目标语言3. 翻译模型4. 上下文的重要性 二、基于规则的机器翻译 (RBMT)1. 规则的制定2. 词典和词汇选择3. 限制与挑战4. PyTorch实现 三、基于统计的机器翻译 (SMT)1. 数据驱动2. 短语对齐3. 评分和选择4. PyTorch实现…...
docker四种网络模式
文章目录 一.为什么要了解docker网络二.docker 网络理论三.docker的四类网络模式3.1 bridge模式3.2 host模式3.3 container模式3.4 none模式 四.bridge模式下容器的通信4.1 防火墙开启状态4.2 防火墙关闭状态 一.为什么要了解docker网络 当你开始大规模使用Docker时࿰…...
C 风格文件输入/输出---无格式输入/输出---(std::fgetc,std::getc,std::fgets)
C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …...
多线程之间如何进行通信 ?
实现多线程之间通信的方式有多种,以下是一些常见的方式: 共享变量:多个线程共享一个变量,通过互斥锁(如synchronized关键字)来保护对该变量的访问,确保线程之间的安全通信。 wait() 和 notify() / notifyAll():通过Object类的wait()方法使线程等待,然后使用notify()或…...
二叉树顺序存储结构
目录 1.二叉树顺序存储结构 2.堆的概念及结构 3.堆的相关接口实现 3.1 堆的插入及向上调整算法 3.1.1 向上调整算法 3.1.2 堆的插入 3.2 堆的删除及向下调整算法 3.2.1 向下调整算法 3.2.2 堆的删除 3.3 其它接口和代码实现 4.建堆或数组调堆的两种方式及复杂度分析…...
Apache HTTPD 多后缀解析漏洞复现
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件: AddType text/html .html AddLanguage zh-CN .cn 其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言&…...
【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放
一、 内存管理基础 1.1 垃圾回收机制 垃圾回收概述 垃圾回收(Garbage Collection)是一种计算机科学和编程领域的重要概念,它主要用于自动管理计算机程序中的内存分配和释放。垃圾回收的目标是识别和回收不再被程序使用的内存,以…...
我的创作纪念日——1个普通网安人的漫谈
机缘 大家好,我是zangcc。今天突然收到了一条私信,才发现来csdn已经1024天了,不知不觉都搞安全渗透2年半多了🐔,真是光阴似箭。 我写博客的初衷只是记录自己的学习历程,比如打打靶场,写一下通关…...
Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory
文章目录 参考博客: Linux中执行bash脚本报错/bin/bash^M: bad interpreter: No such file or directory 首先在此对这位博主表示感谢。 运行bash脚本会出现两个文件,1037.err和1037.out。 1037.err的文件内容如下: /data/home/user12/.lsbat…...
期权交易策略主要有哪些?期权交易策略指南
在学习更复杂的看涨和看跌期权策略之前,普通投资者应该彻底了解一些关于期权的基本知识,这样有助你后期的交易能力和理论知识水平提升有很大的帮助,下文科普期权交易策略主要有哪些?期权交易策略指南!本文来自…...
算法通关村第十四关——解析堆在数组中找第K大的元素的应用
力扣215题, 给定整数数组nums和整数k,请返回数组中第k个最大的元素。 请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。 分析:按照“找最大用小堆,找最小用大堆,找中间…...
【报错】springboot3启动报错
报错内容:Cannot load driver class: org.h2.Driver Error starting ApplicationContext. To display the condition evaluation report re-run your application with debug enabled. 解决; 通过源码分析,druid-spring-boot-3-starter目前最新版本是1…...
阿里云服务器配置怎么选择?小白攻略
阿里云服务器配置选择_CPU内存/带宽/存储配置_小白指南,阿里云服务器配置选择方法包括云服务器类型、CPU内存、操作系统、公网带宽、系统盘存储、网络带宽选择、安全配置、监控等,阿小云分享阿里云服务器配置选择方法,选择适合自己的云服务器…...
关于 RK3568的linux系统killed用户应用进程(用户现象为崩溃) 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132710642 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…...
EasyPHP-Devserver-17安装和配置mantisBT
文章目录 1、准备工作2、安装easyphp2.1 http://127.0.0.1 无法访问 3、安装mantisBT和phpMyAdmin3.1 配置浏览器的访问url和端口号(配置局域网内可访问)3.2 安装mantis 4、Administrator 注册新用户时设置登录密码5、附件上传6、邮件配置 文章参考自&am…...
Python打包教程 PyInstaller和cx_Freeze
当我们开发Python应用程序时,通常会将代码保存在.py文件中,然后通过Python解释器运行它。这对于开发和测试是非常方便的,但在将应用程序分享给其他人或在不同环境中部署时,可能会带来一些问题。为了解决这些问题,我们可…...
用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做
句向量(Sentence Embeddings)模型在多模态人工智能领域起着至关重要的作用,它通过将句子编码为固定长度的向量表示,将语义信息转化为机器可以处理的形式,在 文本分类、信息检索和相似度计算 等多个方面有着广泛应用。 …...
印度做网站/网络销售公司经营范围
接下来就是我要介绍的论文Zhou D, Frmont V, Quost B, et al. Moving Object Detection and Segmentation in Urban Environments from a Moving Platform ☆[J]. Image & Vision Computing, 2017, 68.这是一篇2017 的论文,发表在HAL,HAL is a multi…...
网站商城系统建设/雷神代刷推广网站
点击上方“iOS开发”,选择“置顶公众号” 关键时刻,第一时间送达! 我是照骗 前言 最近逛博客看到了一篇帖子,里面介绍了自己如何设计一套星球大战主题的UI,里面有一个界面破碎的特效,看着很炫酷࿰…...
扬中热线网站/在线推广企业网站的方法
需求: 1.直接执行前端传来的任何sql语句,parameterType"String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType"java.util.Map",但…...
专门做娱乐场所的设计网站/营销策划方案
<div style"display:table"> <div style"float:left">div 1 </div> <div style"float:left">div 2 </div> </div>...
哪个网站是做包装材料珍珠棉包管/免费直链平台
问题描述:本人的项目是用Maven管理,而且用到了servlet3.0的技术,但是项目中用到servlet3.0的地方,总提示找不到类中的方法。很奇怪,在网上找到好多解决办法,综合一下终于解决了。现将经验分享给大家。 前提…...
三亚房产做公示是什么网站/天津百度seo排名优化
什么是HTTP2.0?网上很容易搜到关于HTTP2.0的概念的文章,这里不再累述。苹果从iOS9开始支持HTTP2.0,对iOS开发人员来说,即是iOS9开始,NSURLSession可以支持HTTP2.0。因为苹果已经打算废弃NSURLConnection,所…...