Python NumPy(7):连接数组、分割数组、数组元素的添加与删除

1 连接数组

函数描述
concatenate连接沿现有轴的数组序列
stack沿着新的轴加入一系列数组。
hstack水平堆叠序列中的数组(列方向)
vstack竖直堆叠序列中的数组(行方向)

1.1 numpy.concatenate

        numpy.concatenate 函数用于沿指定轴连接相同形状的两个或多个数组,格式如下:

numpy.concatenate((a1, a2, ...), axis)
  • a1, a2, ...:相同类型的数组
  • axis:沿着它连接数组的轴,默认为 0
import numpy as npa = np.array([[1, 2], [3, 4]])print('第一个数组:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])print('第二个数组:')
print(b)
print('\n')
# 两个数组的维度相同print('沿轴 0 连接两个数组:')
print(np.concatenate((a, b)))
print('\n')print('沿轴 1 连接两个数组:')
print(np.concatenate((a, b), axis=1))

1.2 numpy.stack

        numpy.stack 函数用于沿新轴连接数组序列,格式如下:

numpy.stack(arrays, axis)
  • arrays相同形状的数组序列
  • axis:返回数组中的轴,输入数组沿着它来堆叠
import numpy as npa = np.array([[1, 2], [3, 4]])print('第一个数组:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])print('第二个数组:')
print(b)
print('\n')print('沿轴 0 堆叠两个数组:')
print(np.stack((a, b), 0))
print('\n')print('沿轴 1 堆叠两个数组:')
print(np.stack((a, b), 1))

1.3 numpy.hstack

        numpy.hstack 是 numpy.stack 函数的变体,它通过水平堆叠来生成数组。

import numpy as npa = np.array([[1, 2], [3, 4]])print('第一个数组:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])print('第二个数组:')
print(b)
print('\n')print('水平堆叠:')
c = np.hstack((a, b))
print(c)
print('\n')

1.4 numpy.vstack

        numpy.vstack 是 numpy.stack 函数的变体,它通过垂直堆叠来生成数组。

import numpy as npa = np.array([[1, 2], [3, 4]])print('第一个数组:')
print(a)
print('\n')
b = np.array([[5, 6], [7, 8]])print('第二个数组:')
print(b)
print('\n')print('竖直堆叠:')
c = np.vstack((a, b))
print(c)

2 分割数组

函数数组及操作
split将一个数组分割为多个子数组
hsplit将一个数组水平分割为多个子数组(按列)
vsplit将一个数组垂直分割为多个子数组(按行)

2.1 numpy.split

        numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)
  • ary:被分割的数组
  • indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
  • axis:设置沿着哪个方向进行切分,默认为 0,横向切分,即水平方向。为 1 时,纵向切分,即竖直方向。
import numpy as npa = np.arange(9)print('第一个数组:')
print(a)
print('\n')print('将数组分为三个大小相等的子数组:')
b = np.split(a, 3)
print(b)
print('\n')print('将数组在一维数组中表明的位置分割:')
b = np.split(a, [4, 7])
print(b)

        axis 为 0 时在水平方向分割,axis 为 1 时在垂直方向分割:

import numpy as npa = np.arange(16).reshape(4, 4)
print('第一个数组:')
print(a)
print('\n')
print('默认分割(0轴):')
b = np.split(a, 2)
print(b)
print('\n')print('沿水平方向分割:')
c = np.split(a, 2, 1)
print(c)
print('\n')print('沿水平方向分割:')
d = np.hsplit(a, 2)
print(d)

2.2 numpy.hsplit

        numpy.hsplit 函数用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组。

import numpy as npharr = np.floor(10 * np.random.random((2, 6)))
print('原array:')
print(harr)print('拆分后:')
print(np.hsplit(harr, 3))

2.3 numpy.vsplit

        numpy.vsplit 沿着垂直轴分割,其分割方式与hsplit用法相同。

import numpy as npa = np.arange(16).reshape(4, 4)print('第一个数组:')
print(a)
print('\n')print('竖直分割:')
b = np.vsplit(a, 2)
print(b)

3 数组元素的添加与删除

函数元素及描述
resize返回指定形状的新数组
append将值添加到数组末尾
insert沿指定轴将值插入到指定下标之前
delete删掉某个轴的子数组,并返回删除后的新数组
unique查找数组内的唯一元素

3.1 numpy.resize

        numpy.resize 函数返回指定大小的新数组。如果新数组大小大于原始大小,则包含原始数组中的元素的副本。

numpy.resize(arr, shape)
  • arr:要修改大小的数组
  • shape:返回数组的新形状
import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])print('第一个数组:')
print(a)
print('\n')print('第一个数组的形状:')
print(a.shape)
print('\n')
b = np.resize(a, (3, 2))print('第二个数组:')
print(b)
print('\n')print('第二个数组的形状:')
print(b.shape)
print('\n')
# 要注意 a 的第一行在 b 中重复出现,因为尺寸变大了print('修改第二个数组的大小:')
b = np.resize(a, (3, 3))
print(b)

3.2 numpy.append

        numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中。 此外,输入数组的维度必须匹配否则将生成ValueError。append 函数返回的始终是一个一维数组。

  • arr:输入数组
  • values:要向arr添加的值,需要和arr形状相同(除了要添加的轴)
  • axis:默认为 None。当axis无定义时,是横向加成,返回总是为一维数组!当axis有定义的时候,分别为0和1的时候。当axis有定义的时候,分别为0和1的时候(列数要相同)。当axis为1时,数组是加在右边(行数要相同)。
import numpy as npa = np.array([[1, 2, 3], [4, 5, 6]])print('第一个数组:')
print(a)
print('\n')print('向数组添加元素:')
print(np.append(a, [7, 8, 9]))
print('\n')print('沿轴 0 添加元素:')
print(np.append(a, [[7, 8, 9]], axis=0))
print('\n')print('沿轴 1 添加元素:')
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1))

3.3 numpy.insert

        numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值。函数会在指定位置(或位置数组)插入给定的值或数组,然后返回新的数组。被插入的元素可以是标量值,也可以是数组。需要注意的是,插入操作会返回一个新的数组,而不会改变原始数组。

numpy.insert(arr, obj, values, axis)
  • arr:输入数组
  • obj:在其之前插入值的索引
  • values:要插入的值
  • axis:沿着它插入的轴,如果未提供,则输入数组会被展开
import numpy as npa = np.array([[1, 2], [3, 4], [5, 6]])print('第一个数组:')
print(a)
print('\n')print('未传递 Axis 参数。 在删除之前输入数组会被展开。')
print(np.insert(a, 3, [11, 12]))
print('\n')
print('传递了 Axis 参数。 会广播值数组来配输入数组。')print('沿轴 0 广播:')
print(np.insert(a, 1, [11], axis=0))
print('\n')print('沿轴 1 广播:')
print(np.insert(a, 1, 11, axis=1))

3.4 numpy.delete

        numpy.delete 函数返回从输入数组中删除指定子数组的新数组。 与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。

Numpy.delete(arr, obj, axis)
  • arr:输入数组
  • obj:可以被切片,整数或者整数数组,表明要从输入数组删除的子数组
  • axis:沿着它删除给定子数组的轴,如果未提供,则输入数组会被展开
import numpy as npa = np.arange(12).reshape(3, 4)print('第一个数组:')
print(a)
print('\n')print('未传递 Axis 参数。 在插入之前输入数组会被展开。')
print(np.delete(a, 5))
print('\n')print('删除第二列:')
print(np.delete(a, 1, axis=1))
print('\n')print('包含从数组中删除的替代值的切片:')
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.delete(a, np.s_[::2]))

3.5 numpy.unique

        numpy.unique 函数用于去除数组中的重复元素。

numpy.unique(arr, return_index, return_inverse, return_counts)
  • arr:输入数组,如果不是一维数组则会展开
  • return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储
  • return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储
  • return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数
import numpy as npa = np.array([5, 2, 6, 2, 7, 5, 6, 8, 2, 9])print('第一个数组:')
print(a)
print('\n')print('第一个数组的去重值:')
u = np.unique(a)
print(u)
print('\n')print('去重数组的索引数组:')
u, indices = np.unique(a, return_index=True)
print(indices)
print('\n')print('我们可以看到每个和原数组下标对应的数值:')
print(a)
print('\n')print('去重数组的下标:')
u, indices = np.unique(a, return_inverse=True)
print(u)
print('\n')print('下标为:')
print(indices)
print('\n')print('使用下标重构原数组:')
print(u[indices])
print('\n')print('返回去重元素的重复数量:')
u, indices = np.unique(a, return_counts=True)
print(u)
print(indices)

 

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

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

相关文章

在线课堂小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

生成模型:扩散模型(DDPM, DDIM, 条件生成)

扩散模型的理论较为复杂,论文公式与开源代码都难以理解。现有的教程大多侧重推导公式。为此,本文通过精简代码(约300行),从代码运行角度讲解扩散模型。 本文包括扩散模型的3项技术复现: 1.DDPM (Denoising…

DeepSeek大模型技术解析:从架构到应用的全面探索

一、引言 在人工智能领域,大模型的发展日新月异,其中DeepSeek大模型凭借其卓越的性能和广泛的应用场景,迅速成为业界的焦点。本文旨在深入剖析DeepSeek大模型的技术细节,从架构到应用进行全面探索,以期为读者提供一个…

[权限提升] 常见提权的环境介绍

关注这个框架的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 通过前期的渗透测试,我们大概率会拿到目标的一个 Shell,比如 WebShell 或者 MSF Shell 等等,不同的 Shell 对应提权的姿势也不同,比如有的 Shell…

SQL注入漏洞之高阶手法 宽字节注入以及编码解释 以及堆叠注入原理说明

目录 宽字节注入 编码区分 原理 函数 转译符号解释 注意 绕过方式详解 堆叠【Stack】注入攻击 注入语句 宽字节注入 在说宽字节注入之前 我们需要知道编码相关的知识点,这个有助于搞定什么是宽字节注入 分清楚是ascii码是什么宽字节注入代码里面加入了adds…

Spring Boot - 数据库集成05 - 集成MongoDB

Spring Boot集成MongoDB 文章目录 Spring Boot集成MongoDB一:使用前的准备1:依赖导入 & 配置2:实体类创建 二:核心 - MongoRepository三:核心 - MongoTemplate1:集合操作2:文档操作(重点)3&…

用 Scoop 优雅管理 Windows 软件:安装、配置与使用全指南

本篇将主要讲讲如何用「Scoop」优雅管理 Windows 软件:安装、配置与使用全指南 一、Scoop 是什么? Scoop 是一款专为 Windows 设计的命令行软件包管理工具,它能让你像 Linux 系统一样通过命令快速安装、更新和卸载软件。其核心优势包括&…

基于SpringBoot的假期周边游平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

JavaScript - Web APIs(下)

日期对象 目标:掌握日期对象,可以让网页显示日期 日期对象:用来表示时间的对象 作用:可以得到当前系统时间 学习路径: 实例化 日期对象方法 时间戳 实例化 目标:能够实例化日期对象 在代码中发…

复古壁纸中棕色系和米色系哪个更受欢迎?

根据最新的搜索结果,我们可以看到棕色系和米色系在复古壁纸设计中都非常受欢迎。以下是对这两种颜色系受欢迎程度的分析: 棕色系 受欢迎程度:棕色系在复古壁纸中非常受欢迎,因为它能够营造出温暖、质朴和自然的氛围。棕色系的壁纸…

Windows11无法打开Windows安全中心主界面

​# 问题描述 安全中心无法打卡主界面,并弹出“需要使用新应用以打开此windowsdefender连接”. 解决方法 以管理员权限打开PowerShell,推荐使用快捷键win x打开快捷界面,选择Windows终端(管理员),并在终…

【Valgrind】安装报错: 报错有未满足的依赖关系: libc6,libc6-dbg

Valgrind 内存泄漏检测工具安装 安装 sudo apt install valgrind官方上也是如此 但是在我的系统&#xff08;debian12)上却失败了&#xff1a; 报错有未满足的依赖关系&#xff1a; libc6 : 破坏: valgrind (< 1:3.19.0-1~) 但是 1:3.16.1-1 正要被安装 libc6-dbg : 依赖…

NoSQL与SQL比较

1.认识NoSQL NoSql可以翻译做Not Only Sql&#xff08;不仅仅是SQL&#xff09;&#xff0c;或者是No Sql&#xff08;非Sql的&#xff09;数据库。是相对于传统关系型数据库而言&#xff0c;有很大差异的一种特殊的数据库&#xff0c;因此也称之为非关系型数据库。 1.1.结构…

java——继承

目录 一. 继承的基本概念 二. 继承的语法 三. 继承的核心规则 1.单继承&#xff1a; 2.子类继承父类后&#xff0c;除私有的不支持继承、构造方法不支持继承。其它的全部会继承。 ①访问权限&#xff1a; ②构造方法&#xff1a; 3.一个类没有显示继承任何类时&#xf…

大数据相关职位介绍之二(数据治理,数据库管理员, 数据资产管理师,数据质量专员)

大数据相关职位介绍之二&#xff08;数据治理&#xff0c;数据库管理员&#xff0c; 数据资产管理师&#xff0c;数据质量专员&#xff09; 文章目录 大数据相关职位介绍之二&#xff08;数据治理&#xff0c;数据库管理员&#xff0c; 数据资产管理师&#xff0c;数据质量专员…

《使用通道 Transformer 进行多尺度特征融合,引导热图像超分辨率》学习笔记

paper&#xff1a;Multi-Scale Feature Fusion using Channel Transformers for Guided Thermal Image Super Resolution 目录 摘要 1、介绍 2、相关工作 2.1 可见光图像超分辨率与恢复 2.2 热成像超分辨率 2.3 引导式热成像超分辨率 3、方法 3.1 网络架构&#xff08…

7. 马科维茨资产组合模型+金融研报AI长文本智能体(Qwen-Long)增强方案(理论+Python实战)

目录 0. 承前1. 深度金融研报准备2. 核心AI函数代码讲解2.1 函数概述2.2 输入参数2.3 主要流程2.4 异常处理2.5 清理工作2.7 get_ai_weights函数汇总 3. 汇总代码4. 反思4.1 不足之处4.2 提升思路 5. 启后 0. 承前 本篇博文是对前两篇文章&#xff0c;链接: 5. 马科维茨资产组…

推动知识共享的在线知识库实施与优化指南

内容概要 在当今迅速发展的数字化时代&#xff0c;在线知识库的实施显得尤为重要。它不仅为企业提供了高效的信息存储与共享平台&#xff0c;还能够有效促进团队成员之间的协作与知识传递。通过集中管理企业内的各类知识资源&#xff0c;在线知识库帮助员工快速查找所需信息&a…

51单片机开发:串口通信

实验目标&#xff1a;电脑通过串口将数据发送给51单片机&#xff0c;单片机原封不动地将数据通过串口返送给电脑。 串口的内部结构如下图所示&#xff1a; 串口配置如下&#xff1a; TMOD | 0X20 ; //设置计数器工作方式 2 SCON 0X50 ; //设置为工作方式 1 PCON 0X80 ; …

【电工基础】2.低压带电作业定义,范围,工作要求,电工基本工具

一。低压带电作业 1.低压带电作业定义 低压带电作业是指在不停电的低压设备或低压线路上的工作。对于一些可以不停电的工作&#xff0c;没有偶然触及带电部分的危险工作&#xff0c;或作业人员使用绝缘辅助安全用具直接接触带电体及在带电设备外壳上的工作&#xff0c;均可进行…