【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)

2023-11-14

目录

一、前言

二、实验环境

三、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 np

print("Python 版本:", sys.version)
print("NumPy 版本:", np.__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代表了一个多维的数组,可以存储相同类型的元素。

1. 多维数组的属性

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

1、创建数组

【深度学习】 Python 和 NumPy 系列教程(九):NumPy详解:1、创建数组的n种方式_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://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 np

arr = 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 np

arr = 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 np

arr = 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 np

arr = 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 np

arr = 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 np

arr1 = 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 np

arr1 = 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 np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

# 水平拼接数组
hstack_arr = np.hstack((arr1, arr2.T))

输出:

[[1 2 5]
[3 4 6]]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作) 的相关文章

  • 在推送到容器注册表之前如何对构建的映像运行测试?

    从 gitlab 文档中可以看出如何使用 kaniko 创建 docker 镜像 build stage build image name gcr io kaniko project executor debug entrypoint sc
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • Python设置1和True的解释

    在 IPython 3 交互式 shell 中 In 53 set2 1 2 True hello In 54 len set2 Out 54 3 In 55 set2 Out 55 hello True 2 是因为 1 和 True 得到
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • Python sys.modules 包含尚未导入的模块

    我试图了解加载的模块与导入的模块之间的区别 如果有的话 我正在使用 Python 2 7 3 并且只是从命令行运行 Python 如果我执行 import sys sys modules 我得到一个列表 其中包括os 例如 文档说sys m
  • dask apply:AttributeError:“DataFrame”对象没有属性“name”

    我有一个参数数据框 并对每一行应用一个函数 该函数本质上是几个 sql queries 和对结果的简单计算 我正在尝试利用 Dask 的多处理 同时保持结构和界面 下面的例子有效并且确实有显着的提升 def get metrics row
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • Django 1.7 应用程序配置导入错误:没有名为 appname.apps 的模块

    我正在尝试按照以下文档为我的一个名为 文章 的 Django 应用程序设置自定义应用程序配置https docs djangoproject com en dev ref applications https docs djangoproj
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 错误:尝试使用 scrappy 登录时出现 raise ValueError("No element found in %s" % response)

    问题描述 我想从我大学的bbs上抓取一些信息 这是地址 http bbs byr cn http bbs byr cn下面是我的蜘蛛的代码 from lxml import etree import scrapy try from scra
  • 如何处理 Tkinter 中的窗口关闭事件?

    如何在 Python Tkinter 程序中处理窗口关闭事件 用户单击 X 按钮 Tkinter 支持一种称为协议处理程序 http web archive org web 20201111215134 http effbot org tk
  • 更新 matplotlib 中颜色条的范围

    我想更新一个contourf在函数内绘制 效果很好 然而 数据的范围发生了变化 因此我还必须更新颜色条 这就是我未能做到的地方 请参阅以下最小工作示例 import matplotlib pyplot as plt import numpy
  • 如何在 Python 中跟踪日志文件?

    我想在 Python 中提供 tail F 或类似内容的输出 而无需阻塞或锁定 我找到了一些非常旧的代码来做到这一点here http code activestate com recipes 436477 filetailpy 但我认为现
  • 无法将matplotlib安装到pycharm

    我最近开始使用Python速成课程学习Python编程 我陷入困境 因为我无法让 matplotlib 在 pycharm 中工作 我已经安装了pip 我已经通过命令提示符使用 pip 安装了 matplotlib 现在 当我打开 pych
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • Python matplotlib:将轴标签/图例从粗体更改为常规粗细

    我正在尝试制作一些出版质量的图 但遇到了一个小问题 默认情况下 matplotlib 轴标签和图例条目的权重似乎比轴刻度线重 是否有办法强制轴标签 图例条目与刻度线的重量相同 import matplotlib pyplot as plt
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • PYTHON:从 txt 文件中删除 POS 标签

    我有以下 txt 文件 其中包含 POS 词性 http en wikipedia org wiki Part of speech tagging 每个单词的标签 不用 jj到 说 vb 我 ppss是 bedz愤怒 jj在 在 dt无与伦

随机推荐

  • Nginx 安装成功后,无法访问到默认页面

    安装 Nginx 后 无法访问到 Nginx 页面 1 查看 Nginx 是否启动成功 ps ef grep nginx 2 查看默认80端口是否分配给 Nginx netstat ntlp 如果前面几步都是正常的 则可以判断出是防火墙将8
  • 【SpringCloud-学习笔记】Docker基本操作

    1 镜像相关命令 镜像名称一般分两部分组成 repository tag 在没有指定tag时 默认是latest 代表最新版本的镜像 2 镜像操作命令 3 案例 从DockerHub中拉取一个nginx镜像并查看 首先去镜像仓库搜索ngin
  • 关于rfind

    rfind全名reversefind 与find相反 size type rfind const basic string str size type index size type rfind const char str size ty
  • Java面向对象编程

    下列关于线性链表的叙述中 正确的是 A 各数据结点的存储空间可以不连续 但它们的存储顺序与逻辑顺序必须一致 B 各数据结点的存储顺序与逻辑顺序可以不一致 但它们的存储空间必须连续 C 进行插入与删除时 不需要移动表中的元素 D 以上说法均不
  • IDEA 回退GIT代码

    IDEA 回退GIT代码 我们代码平时在IDEA开发完成后 提交代码到远程仓库的流程为 我们在提交代码到远程仓库的时候难免会发生提交了错误代码 要回滚到上个版本的情景 根据上面的流程我整理了一下三个场景的解决方案 1 idea中git回退已
  • 个人隐私问题

    近日 某高校毕业生在校期间窃取学校内网数据 收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注 在大数据时代 算法分发带来了隐私侵犯 在享受消费生活等便捷权利的同时 似乎又有不少个人信息泄露的担忧 用隐私换便利
  • mybatisplus分页总是查到全部数据?

    这是因为版本的问题 在3 4 1及以上需要配置过滤器以实现分页 分页代码 gt Test void contextLoads6 Page
  • x86平台运行arm64平台docker 镜像

    本文介绍在x86服务器上安装qemu aarch64 statick仿真器 以实现x86服务器可以运行docker或docker compose镜像 报错信息 x86服务器默认不能运行ARM平台镜像 会提示如下错误 WARNING The
  • CMD命令读取某个目录下所有文件夹名或文件名

    CMD命令读取某个目录下所有文件夹名或文件名 CMD命令读取某个目录下所有文件夹名或文件名 要用到的dir命令 开始操作 CMD命令读取某个目录下所有文件夹名或文件名 目的是给自己留个笔记 要用到的dir命令 dir ad 只查看文件夹 d
  • sql:MySql create FUNCTION,VIEW,PROCEDURE

    use geovindu 函数 DELIMITER drop function if exists f GetDepartmentName CREATE function f GetDepartmentName did int return
  • TIOBE 发布 9 月编程语言排行榜:Python 登顶,Kotlin 重返前 20

    文章目录 前言 Kotlin 重新 杀回 Top 20 其他编程语言 Top 10 编程语言 TIOBE 指数走势 2002 2023 历史排名 1988 2023 编程语言 名人榜 2003 2022 说明 零基础Python学习资源介绍
  • ChatPPT 国内首个AI自动生成PPT效率工具

    场景 目前了解到ChatPPT使用首先需要下载安装MotionGo插件 安装完成之后在WPS或者office里面直接打开就可以了 方法 输入主题即可
  • 更改时间同步服务器bat文件,将windows server 2008设置成ntp时间同步服务器.bat

    echo off echo autor OAK echo off echo echo off REG ADD HKEY LOCAL MACHINE SYSTEM CurrentControlSet Services W32Time Para
  • matlab练习程序(Sepia Tone滤镜)

    我手机上有一个软件实现了很多图像滤镜 挺有意思 我打算都尝试一下 这个滤镜主要是实现老照片效果 代码很短 我就不详细介绍了 原图 处理后效果 matlab代码如下 clear all close all clc img imread len
  • xshell:全网最简单的将xshell连接图形界面linux虚拟机(ubantu,kali)

    问题提出 如何在windows连接图形界面linux虚拟机 我之前在网上找的教程都特别麻烦 要改这个改那个 相当复杂 机器配置 电脑windows10 虚拟机版本VMware 15 x xshell7 Linux kali linux最新版
  • JAVA异常

    异常 1 异常概述 异常 程序执行过程中 产出的问题 因为异常的问题程序的正常的逻辑中断 Java程序在执行过程中所发生的异常事件可分为两类 异常最顶层的类Throwable Error Java虚拟机无法解决的严重问题 如 JVM系统内部
  • [矩阵的三角分解系列五] 三角分解中的行列变换

    三角分解中的行列变换 简介 行变换分解 置换矩阵 PLU分解 证明 例子 引用 矩阵的三角分解是求解线性方程组常用的方法 包括LU分解 LDU分解 杜利特 Doolittle 分解 克劳特 Crout 分解 LLT 乔累斯基Cholesky
  • css 伪类清除浮动,CSS中盒模型、浮动以及清除浮动的方法

    盒模型 在 htm 中每一个元素都可以看成是一个盒子 默认情况下盒子的边框是无 背景色是透明的 所以在默认情况下看不到盒子 盒子由 margin border padding content 盒子中的内容 四部分组成 1 margin 元素
  • Redis内存被占满的解决办法(淘汰策略)

    Redis在实际使用中 肯定会遇到内存占满的问题 那么该如何解决这个问题呢 1 增加内存 不推荐 因为即使加大内存 以后还是会有内存被占满的可能 不能根本解决问题 2 使用Redis Cluster 关于Redis Cluster参考Red
  • 【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)

    目录 一 前言 二 实验环境 三 NumPy 0 多维数组对象 ndarray 1 多维数组的属性 1 创建数组 2 数组操作 1 索引和切片 a 索引 b 切片 2 形状操作 a 获取数组形状 b 改变数组形状 c 展平数组 3 转置操作