【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)
目录
一、前言
二、实验环境
三、NumPy
0、多维数组对象(ndarray)
1. 多维数组的属性
1、创建数组
2、数组操作
1. 索引和切片
a. 索引
b. 切片
2. 形状操作
a. 获取数组形状
b. 改变数组形状
c. 展平数组
3. 转置操作
a. 使用.T属性
b. 使用transpose()函数
4. 拼接操作
np.concatenate()函数
np.vstack()函数
np.hstack()函数
一、前言
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
代表了一个多维的数组,可以存储相同类型的元素。
1. 多维数组的属性
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.5502
2、数组操作
1. 索引和切片
-
a. 索引
- 使用整数索引:可以使用整数索引访问数组中的特定元素。例如,
arr[0]
将返回数组arr
中的第一个元素。 - 使用布尔索引:可以使用布尔数组作为索引来选择满足特定条件的元素。例如,
arr[arr > 5]
将返回数组arr
中大于5的元素。 - 使用多维索引:对于多维数组,可以使用多个整数或布尔索引来访问特定的元素。例如,
arr[0, 1]
将返回多维数组arr
中第一行第二列的元素。
- 使用整数索引:可以使用整数索引访问数组中的特定元素。例如,
import numpy as nparr = np.array([1, 2, 3, 4, 5])# 整数索引
print(arr[0]) # 输出:1# 布尔索引
print(arr[arr > 3]) # 输出:[4, 5]# 多维索引
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[0, 1]) # 输出:2
-
b. 切片
- 使用基本切片:可以使用基本切片表示法从数组中获取连续的子数组。例如,
arr[1:5]
将返回数组arr
中索引为1到4的元素。 - 使用步长切片:可以使用步长切片表示法从数组中获取间隔的子数组。例如,
arr[1:5:2]
将返回数组arr
中索引为1、3的元素。 - 使用省略号切片:对于多维数组,可以使用省略号(...)表示连续的切片。例如,
arr[..., 1]
将返回多维数组arr
中的第二列。 - 使用负数索引和切片:可以使用负数索引和切片来从数组的末尾开始访问元素。例如,
arr[-1]
将返回数组arr
中的最后一个元素。
- 使用基本切片:可以使用基本切片表示法从数组中获取连续的子数组。例如,
import numpy as nparr = np.array([1, 2, 3, 4, 5])# 基本切片
print(arr[1:4]) # 输出:[2, 3, 4]# 步长切片
print(arr[1:5:2]) # 输出:[2, 4]# 省略号切片
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[..., 1]) # 输出:[2, 5]# 负数索引和切片
print(arr[-1]) # 输出:[4, 5, 6]
2. 形状操作
a. 获取数组形状
b. 改变数组形状
c. 展平数组
import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])# 获取数组形状
print(arr.shape) # 输出:(2, 3)# 改变数组形状
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
# 输出:
# [[1 2]
# [3 4]
# [5 6]]# 展平数组
flattened_arr = arr.flatten()
print(flattened_arr) # 输出:[1 2 3 4 5 6]
3. 转置操作
数组转置操作是指将数组的行和列互换的操作,转置操作对于处理二维数组特别有用,例如在矩阵运算和线性代数中经常需要对数组进行转置。
a. 使用.T属性
在NumPy中,多维数组对象(ndarray)具有一个名为.T
的属性,可以用于进行转置操作。该属性返回原始数组的转置结果,即行变为列,列变为行。
import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
transposed_arr = arr.T
print(transposed_arr)
输出:
[[1 4]
[2 5]
[3 6]]
b. 使用transpose()
函数
另一种实现数组转置的方法是使用np.transpose()
函数。该函数接受一个多维数组作为参数,并返回其转置结果。
import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])
transposed_arr = np.transpose(arr)
print(transposed_arr)
输出:
[[1 4]
[2 5]
[3 6]]
4. 拼接操作
数组拼接操作是指将多个数组按照指定的方式进行连接的操作。
np.concatenate()
函数
np.concatenate()函数用于沿指定的轴连接数组。可以沿着现有的轴连接两个或多个数组,也可以指定
axis参数来创建一个新的轴。np.concatenate()`函数将`arr1`和`arr2`沿着行方向(`axis=0`)进行了拼接:
import numpy as nparr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])# 沿行方向拼接数组
concatenated_arr = np.concatenate((arr1, arr2), axis=0)
print(concatenated_arr)
输出:
[[1 4]
[2 5]
[3 6]]
np.vstack()
函数
np.vstack()函数用于垂直拼接(按行堆叠)两个或多个数组。它将输入的数组沿着垂直方向堆叠起来,生成一个新的数组。
import numpy as nparr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])# 垂直拼接数组
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr)
输出:
[[1 4]
[2 5]
[3 6]]
np.hstack()
函数
np.hstack()函数用于水平拼接(按列堆叠)两个或多个数组。它将输入的数组沿着水平方向堆叠起来,生成一个新的数组。
import numpy as nparr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])# 水平拼接数组
hstack_arr = np.hstack((arr1, arr2.T))
输出:
[[1 2 5]
[3 4 6]]
相关文章:

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)
目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 1. 多维数组的属性 1、创建数组 2、数组操作 1. 索引和切片 a. 索引 b. 切片 2. 形状操作 a. 获取数组形状 b. 改变数组形状 c. 展平数组 3. 转置操作 a. 使用.T属性 b…...

3D视觉测量:复现Gocator的间隙面差
文章目录 0. 测试效果1. Gocator实现基本内容1.1 实现步骤1.2 参数说明 2. 未作 or TODO3. 开发说明 目标:使用C PCL复现Gocator中的间隙面差前置说明:因为没有拿到Gocator中用到的原始数据,仅是拿到与之类似的数据,因此最后测试的…...

文献综述怎么写?(以利用Zotero的文献管理软件为例)
文章目录 文章内容总结前言一. 利用文献管理软件建立文献库1. 创建文献分类2. 在论文库中搜索关键词并导入到文献管理软件中以web of science 为例以 IEEE Xplore为例 二、 导出文献、阅读摘要并记录关键字三、寻找一两篇本方向的文献综述,分析借鉴其文章结构四、写…...

中尺度混凝土二维有限元求解——运行弯曲、运行光盘、运行比较、运行半圆形(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Python文件存读取
Python文件存读取 想整理一下存读取函数,方便以后直接调用。 读取 1、读xls、csv、xlsx到dataframe 这段代码非常好用,这个函数直接把各种格式文件给汇总了 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:]…...

SpringBoot整合Easy-ES实现对ES操作
请确保已有可用的ES,若没有,请移步:Docker安装部署ElasticSearch(ES) 新建SpringBoot项目 这里是用的springboot版本是2.6.0 引入依赖 <!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--><…...

让NPU跑起来迅为RK3588开发板设置交叉编译器
让NPU跑起来迅为RK3588开发板设置交叉编译器 编译器下载地址是网盘资料“iTOP-3588 开发板\02_【iTOP-RK3588 开发板】开发资料 \12_NPU 使用配套资料\03_编译所需工具\Linux”。 拷贝 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.gz 到 Ubuntu 的/opt/tool_ch…...
yyyy-MM-dd‘T‘HH:mm:ssZ的T是什么意思?为什么要用单引号引着
背景 Java里的日期格式,通常我们看到 yyyy-MM-ddTHH:mm:ssZ 的写法是什么意思? 尤其这个T作为分隔符为什么左右有单引号,这个单引号会打印出来吗? 这个Z又是什么意思?是时区吗?如果是时区,输…...

SIT1145AQ收发器芯片CAN FD Passive功能详解(摘自官网)
芯力特在SIT1145AQ/FD版本中加入了CAN FD Passive功能,CAN FD Passive功能简单来说就是SIT1145AQ/FD在休眠或待机模式下屏蔽总线上的CAN FD报文。 为什么需要CAN FD Passive功能呢? SIT1145AQ的特定帧唤醒只支持CAN报文,当SIT1145AQ休眠模式…...

安卓毕业设计各种app项目,Android毕设设计,Android课程设计,毕业论文
作为一位从事软件开发多年的专业人士,您积累了丰富的经验和技能,解决了许多不同类型的问题。除了开发原创项目,您还愿意分享您的知识,指导实习生和在校生。这种乐于助人的行为对于行业的发展和新一代软件开发者的成长都起着积极的…...
c++下的ros通信(cmake的报错问题多)
1.自定义msg 这里的自定义msg和python的其实是一样的: 首先在src目录下 catkin_create_pkg car_interfaces rospy roscpp std_msgs message_runtime message_generation然后新建一个msg文件夹,然后建立相应的msg文件,接着就可以修改编译所需…...

测试必备 | 测试工程师必知的Linux命令有哪些?
在日常的测试工作中,涉及到测试环境搭建及通过查看日志来定位相关问题时经常会用到Linux,在测试工程师的面试中也经常会有笔试或面试的题目来考查测试人员对Linux的熟悉程度,这里分享下测试工程师需知的 Linux 命令有哪些。 Linux 作为一种常…...

成集云 | 药师帮集成英克ERP接口 | 解决方案
源系统成集云目标系统 业务背景 药师帮是一家专注于医药行业的电商平台,提供医药产品在线采购、销售和物流等一站式服务。药师帮致力于用数字化赋能院外医药市场的参与者,包括药企、药品分销商、药店及基层医疗机构,努力以安全高效…...
ICPC 2022 网络赛 d ( 数位dp + 二分
#include<bits/stdc.h> using namespace std; using VI vector<int>; using ll long long; const int mod 998244353;ll n; int d[100]; int dp[60][40][40][2]; set<int> s; //枚举数位,枚举这一位余数是几 //每一位的限制, int d…...

透视俄乌网络战之二:Conti勒索软件集团(下)
透视俄乌网络战之一:数据擦除软件 透视俄乌网络战之二:Conti勒索软件集团(上) Conti勒索软件集团(下) 1. 管理面板源代码2. Pony凭证窃取恶意软件3. TTPs4. Conti Locker v2源代码5. Conti团伙培训材料6. T…...

网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)
文章目录 一、RCE二、命令执行/注入-概述三、命令执行-常见函数四、PHP命令执行-常见函数1、exec:2、system3、passthru4、shell_exec5、反引号 backquote 五、PHP命令执行-常见函数总结六、命令执行漏洞成因七、命令执行漏洞利用条件八、命令执行漏洞分类1、代码层…...

应用在电子体温计中的国产温度传感芯片
电子体温计由温度传感芯片,液晶显示器,纽扣电池,专用集成电路及其他电子元器件组成。能快速准确地测量人体体温,与传统的水银玻璃体温计相比,具有读数方便,测量时间短,测量精度高,能…...

JVM 虚拟机 ----> Java 内存模型(JMM)
文章目录 Java 内存模型(JMM)一、运行时数据区域划分二、程序计数器(Program Counter Register)计数器的作用 三、Java 虚拟机栈(VM Stack)四、本地方法栈(Native Method Stack)五、…...

指针-字符串替换
任务描述 从标准输入读入数据,每行中最多包含一个字符串 “_xy_”,且除了字符串“_xy_”外,输入数据中不包括下划线字符,请将输入行中的 “_xy_” 替换为 “_ab_”, 在标准输出上输出替换后的结果;若没有进行过满足条…...

docker 网络(单机环境)
文章目录 深入理解 Namespace什么是NamespaceNamespace当中的 Network Namespace Libcontainerdocker 网络基础创建两个命名空间创建网络接口 veth pair命名空间添加 veth 接口为 veth 接口分配 IP启动 veth 接口相互 ping bridge 网络搭建网络环境查看docker0 网桥创建网桥 br…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...