【深度学习】 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…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
