【NumPy 数组连接、拆分、搜索、排序】

news2024/10/5 18:31:33

在这里插入图片描述

🤵‍♂️ 个人主页@老虎也淘气 个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注

python之numpy学习

  • NumPy 数组连接
    • 连接 NumPy 数组
    • 使用堆栈函数连接数组
    • 沿行堆叠
    • 沿列堆叠
    • 沿高度堆叠(深度)
    • NumPy 数组拆分
    • 拆分 NumPy 数组
    • 拆分为数组
    • 分割二维数组
  • NumPy 数组搜索
    • 搜索数组
    • 搜索排序
    • 从右侧搜索
    • 多个值
    • NumPy 数组排序
    • 数组排序
    • 对 2-D 数组排序

NumPy 数组连接

连接 NumPy 数组

连接意味着将两个或多个数组的内容放在单个数组中。

在 SQL 中,我们基于键来连接表,而在 NumPy 中,我们按轴连接数组。

我们传递了一系列要与轴一起连接到 concatenate() 函数的数组。如果未显式传递轴,则将其视为 0。

实例
连接两个数组:

import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr = np.concatenate((arr1, arr2))

print(arr)

实例
沿着行 (axis=1) 连接两个 2-D 数组:

import numpy as np

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

arr2 = np.array([[5, 6], [7, 8]])

arr = np.concatenate((arr1, arr2), axis=1)

print(arr)

使用堆栈函数连接数组

堆栈与级联相同,唯一的不同是堆栈是沿着新轴完成的。

我们可以沿着第二个轴连接两个一维数组,这将导致它们彼此重叠,即,堆叠(stacking)。

我们传递了一系列要与轴一起连接到 concatenate() 方法的数组。如果未显式传递轴,则将其视为 0。

实例

import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr = np.stack((arr1, arr2), axis=1)

print(arr)

沿行堆叠

NumPy 提供了一个辅助函数:hstack() 沿行堆叠。

实例

import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr = np.hstack((arr1, arr2))

print(arr)

沿列堆叠

NumPy 提供了一个辅助函数:vstack() 沿列堆叠。

实例

import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr = np.vstack((arr1, arr2))

print(arr)

沿高度堆叠(深度)

NumPy 提供了一个辅助函数:dstack() 沿高度堆叠,该高度与深度相同。

实例

import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr = np.dstack((arr1, arr2))

print(arr)

NumPy 数组拆分

拆分 NumPy 数组

拆分是连接的反向操作。

连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。

我们使用 array_split() 分割数组,将要分割的数组和分割数传递给它。

实例
将数组分为 3 部分:

import numpy as np

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

newarr = np.array_split(arr, 3)

print(newarr)

注释:返回值是一个包含三个数组的数组。

如果数组中的元素少于要求的数量,它将从末尾进行相应调整。

实例
将数组分为 4 部分:

import numpy as np

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

newarr = np.array_split(arr, 4)

print(newarr)

提示:我们也有 split() 方法可用,但是当源数组中的元素较少用于拆分时,它将不会调整元素,如上例那样,array_split() 正常工作,但 split() 会失败。

拆分为数组

array_split() 方法的返回值是一个包含每个分割的数组。

如果将一个数组拆分为 3 个数组,则可以像使用任何数组元素一样从结果中访问它们:

实例
访问拆分的数组:

import numpy as np

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

newarr = np.array_split(arr, 3)

print(newarr[0])
print(newarr[1])
print(newarr[2])

分割二维数组

拆分二维数组时,请使用相同的语法。

使用 array_split() 方法,传入要分割的数组和想要分割的数目。

实例
把这个 2-D 拆分为三个 2-D 数组。

import numpy as np

arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])

newarr = np.array_split(arr, 3)

print(newarr)

上例返回三个 2-D 数组。

让我们看另一个例子,这次 2-D 数组中的每个元素包含 3 个元素。

实例
把这个 2-D 拆分为三个 2-D 数组。

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]])

newarr = np.array_split(arr, 3)

print(newarr)

上例返回三个 2-D 数组。

此外,您可以指定要进行拆分的轴。

下面的例子还返回三个 2-D 数组,但它们沿行 (axis=1) 分割。

实例
沿行把这个 2-D 拆分为三个 2-D 数组。

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]])

newarr = np.array_split(arr, 3, axis=1)

print(newarr)

另一种解决方案是使用与 hstack() 相反的 hsplit()。

实例
使用 hsplit() 方法将 2-D 数组沿着行分成三个 2-D 数组。

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]])

newarr = np.hsplit(arr, 3)

print(newarr)

提示:vsplit() 和 dsplit() 可以使用与 vstack() 和 dstack() 类似的替代方法

NumPy 数组搜索

搜索数组

您可以在数组中搜索(检索)某个值,然后返回获得匹配的索引。

要搜索数组,请使用 where() 方法。

实例
查找值为 4 的索引:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 4, 4])

x = np.where(arr == 4)

print(x)

上例会返回一个元组:(array([3, 5, 6],)

意思就是值 4 出现在索引 3、5 和 6。

实例
查找值为偶数的索引:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

x = np.where(arr%2 == 0)

print(x)

实例
查找值为奇数的索引:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])

x = np.where(arr%2 == 1)

print(x)

搜索排序

有一个名为 searchsorted() 的方法,该方法在数组中执行二进制搜索,并返回将在其中插入指定值以维持搜索顺序的索引。

假定 searchsorted() 方法用于排序数组。

实例
查找应在其中插入值 7 的索引:

import numpy as np

arr = np.array([6, 7, 8, 9])

x = np.searchsorted(arr, 7)

print(x)

例子解释:应该在索引 1 上插入数字 7,以保持排序顺序。

该方法从左侧开始搜索,并返回第一个索引,其中数字 7 不再大于下一个值。

从右侧搜索

默认情况下,返回最左边的索引,但是我们可以给定 side=‘right’,以返回最右边的索引。

实例
从右边开始查找应该插入值 7 的索引:

import numpy as np

arr = np.array([6, 7, 8, 9])

x = np.searchsorted(arr, 7, side='right')

print(x)

例子解释:应该在索引 2 上插入数字 7,以保持排序顺序。

该方法从右边开始搜索,并返回第一个索引,其中数字 7 不再小于下一个值。

多个值

要搜索多个值,请使用拥有指定值的数组。

实例
查找应在其中插入值 2、4 和 6 的索引

import numpy as np

arr = np.array([1, 3, 5, 7])

x = np.searchsorted(arr, [2, 4, 6])

print(x)

返回值是一个数组:[1 2 3] 包含三个索引,其中将在原始数组中插入 2、4、6 以维持顺序。

NumPy 数组排序

数组排序

排序是指将元素按有序顺序排列。

有序序列是拥有与元素相对应的顺序的任何序列,例如数字或字母、升序或降序。

NumPy ndarray 对象有一个名为 sort() 的函数,该函数将对指定的数组进行排序。

实例
对数组进行排序:

import numpy as np

arr = np.array([3, 2, 0, 1])

print(np.sort(arr))

注释:此方法返回数组的副本,而原始数组保持不变。

您还可以对字符串数组或任何其他数据类型进行排序:

实例
对数组以字母顺序进行排序:

import numpy as np

arr = np.array(['banana', 'cherry', 'apple'])

print(np.sort(arr))

实例
对布尔数组进行排序:

import numpy as np

arr = np.array([True, False, True])

print(np.sort(arr))

对 2-D 数组排序

如果在二维数组上使用 sort() 方法,则将对两个数组进行排序:

实例
对 2-D 数组排序

import numpy as np

arr = np.array([[3, 2, 4], [5, 0, 1]])

print(np.sort(arr))

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计宠物领养系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等…

数学基础从高一开始5、充分必要条件

数学基础从高一开始5、充分必要条件 目录 数学基础从高一开始5、充分必要条件 概念复习 命题 真命题与假命题 命题的形式 概念定义 例1: 例2 练习 总结 概念复习 命题 命题:把用语言、符号或式子表达的,可以判断真假的陈述句称为命题。 真命题…

杨校老师课堂之MySQL数据库面试题【开发工程师面试前必看】

1.说一说三大范式 「第一范式」:数据库中的字段具有「原子性」,不可再分,并且是单一职责 「第二范式」:「建立在第一范式的基础上」,第二范式要求数据库表中的每个实例或行必须「可以被惟一地区分」。为实现区分通常需…

Rasa 基于规则的对话管理: 天气预报机器人

文章目录1. fallbackNLU fallback2. 意图触发动作3. 表单定义表单激活表单执行表单任务4. 天气预报机器人nlu.ymlstories.ymlrules.ymlcities.ymldomain.ymlconfig.ymlendpoints.ymlcredentials.ymlactions.py测试learn from https://github.com/Chinese-NLP-book/rasa_chinese…

Keras深度学习实战(40)——音频生成

Keras深度学习实战(40)——音频生成0. 前言1. 模型与数据集分析1.1 数据集分析1.2 模型分析2. 音频生成模型2.1 数据集加载与预处理2.2 模型构建与训练小结系列链接0. 前言 我们已经在《文本生成模型》一节中学习了如何利用深度神经网络生成文本&#x…

智能、人机融合智能和深度态势感知

内容摘要:人工智能的符号主义、联结主义和行为主义三大学派,分别从不同角度切入智能的本质,其研究观点相互补充但各有局限。在人机融合过程中,怎样进行人机功能分配,人机怎样融合学习、理解、决策、推理乃至感知。数据…

获取微信公众号token

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token 接口调用请求说明 https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidAPPID&secretAPPSECRET参数说明 参数是否必填说…

牛!单表千万行数据库: LIKE 搜索优化手记

我们可以在 txt 列上建立索引,用于优化该查询: CREATE INDEX tbl_like_txt_idx ON [tbl_like] ( [txt] ) 应用索引后,查询速度大大加快,仅需 5 毫秒: 由此可知:对于左前缀匹配,我们可以通过增…

市政工控典型安全解决方案

汽车制造业 MES系统 DNC系统 生产 安全域1 管理层 工控安全隔离装置 交换机 安全配置核查系统 HMI 历史数据库 运行监控系统 实时数据库 打印机过程 安全域2 监控层 工控漏洞扫描系统 安全交换机 工控安全审计系统 工控入侵检测系统工程师站 A 操作员站 A 实时数据库A 操作员站…

Linux中的文件传输命令(scp、rsync)、Linux之间通过sshkey公钥免密登录

scp测试环境:centos7.7 最小化安装,默认是有scp命令 -r 递归复制整个目录 -p 保留源文件的修改时间、访问时间和权限 -v 详细方式显示输出 -P(大写)指定port(端口)输出scp命令使用格式 scp /filename 目…

Linux 程序开发 之 库打桩机制

目录前言一、库打桩定义二、编译时打桩三、链接时打桩四、运行时打桩五、处理目标文件的工具前言 Linux 链接器支持一个很强大的技术,称为库打桩(library interpositioning),它允许你截获对共享库函数的调用,取而代之执行自己的代码。使用打桩…

m基于ACO蚁群优化的货车运输路线规划matlab仿真,考虑车辆载重,单位运输成本等因素

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 蚁群算法是通过对自然界中真实蚂蚁的集体行为的观察,模拟而得到一种仿生优化算法,它具有很好的并行性,分布性.根据蚂蚁群体不同的集体行为特征,蚁群算法可分为受蚂蚁觅食行为启发的模型和受孵化分…

渗透学习-靶场篇-WebGoat靶场(JWT攻击)

文章目录前言一、介绍JWTJWT令牌结构获取的令牌的基本过程二、攻击方式以及靶场的搭建1.安装cWebGoat2.空加密验证攻击3.字典爆破三、认证-键值逻辑前言 本次主要学习了javaweb项目方面任意出现的一些安全问题,最主要的是有关于JWT身份认证上的攻击,并利…

es的搜索服务

1、在项目中&#xff0c;创建一个搜索服务的模块&#xff1a;search-service 2、在新创建的搜索模块中添加依赖&#xff1a; <dependencies><!--nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-start…

MyBatis-Plus中的逻辑删除使用

系列文章目录 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus分页查询&#xff08;快速上手运用&#xff09;_心态还需努力呀的博客-CSDN博客_mybatis plus分页查询 MyBa…

【ESXi 7.x 升 8.x】ESXi 升级 —— 使用 ESXCLI 升级 ESXi(Offline Bundle ZIP)

目录3.1 示例 — 使用 ESXCLI 升级 ESXi&#xff08;Offline Bundle ZIP&#xff09;【目标&#xff1a;将 ESXi 6.5 U2 GA 升级为 7.0 U3f】&#xff08;1&#xff09;下载离线升级ZIP包&#xff08;2&#xff09;升级 ESXi① 查看离线包② 升级前确认ESXi版本③ 获取升级用的…

[附源码]Python计算机毕业设计大学生社团管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

ChatGPT教程之 01 什么是ChatGPT革命性的对话生成新工具

今天,我想揭开 ChatGPT 的神秘面纱——GANs*(生成对抗网络)的一个迷人的新应用程序,它在 AI 社区中引起了很大的轰动。 对于那些不熟悉 GAN 的人来说,它们是一种神经网络,它使用两个相互竞争的网络——一个生成器和一个鉴别器——来创建逼真的输出。生成器创建假输出,而…

Paper Note——经典Polyline类型Map论文损失函数

文章目录1. Hierarchical Recurrent Attention Networks for Structured Online Maps2. DAGMapper: Learning to Map by Discovering Lane Topology1. Hierarchical Recurrent Attention Networks for Structured Online Maps https://patrick-llgc.github.io/Learning-Deep-Le…