【Numpy】04 深入理解NumPy的高级索引技术

掌握NumPy:从新手到高手的数组操作之旅

前言

前面【Numpy】03 数组的切片和索引操作深入详解的切片和索引操作只能索引出有规律的元素数据,比如同轴向,若要索引如下元素则无法实现,下面就介绍数组的高级索引(花式索引),可以实现对任意元素的索引。

在Python的数据科学和机器学习领域,NumPy无疑是一个基石。它提供了强大的数组操作能力,让数据处理变得既高效又简单。今天,我们将深入探索NumPy中三种强大的技术:花式索引、布尔索引。这篇文章将带你从新手迈向高手,让你在NumPy的世界中游刃有余。

花式索引:选择你想要的一切

花式索引是NumPy提供的一个强大功能,它允许你使用整数数组作为索引来访问数组中的特定元素。这不仅适用于一维数组,也适用于多维数组,让你能够灵活地选择和修改数据。

什么是花式索引?

花式索引(Fancy Indexing)允许你使用整数数组作为索引来访问数组中的元素。这种方式非常灵活,可以让你选择或改变数组中你想要的元素。

一维数组的花式索引

假设你有一个一维数组,你想基于一组指定的下标来获取数组中的元素。

import numpy as np# 创建一个一维数组
arr = np.array([10, 20, 30, 40, 50])
print("原始数组:", arr)
# 输出:原始数组: [10 20 30 40 50]# 使用花式索引
indices = [1, 3, 4]  # 指定想要的元素的下标
print("花式索引结果:", arr[indices])
# 输出:花式索引结果: [20 40 50]

在这个示例中,我们通过指定下标[1, 3, 4]来选择数组中的第二、第四和第五个元素。

多维数组的花式索引

在多维数组中,花式索引可以帮助你选择不连续的行或列,甚至是降维操作。

# 创建一个二维数组
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("原始二维数组:\n", arr2d)# 使用花式索引选择不连续的行
print("选择第一行和第三行:\n", arr2d[[0, 2]])
# 输出:
# 选择第一行和第三行:
# [[1 2 3]
#  [7 8 9]]
# 多维数组的花式索引
print("行索引[0, 2]列索引[1, 2]的结果:\n", arr2d[[0, 2], [1, 2]])
# 输出:
# 行索引[0, 2]列索引[1, 2]的结果:
# [2 9]

在这个示例中,我们通过指定行的索引[[0, 2]]来选择第一行和第三行,结果还是二维数组;
通过索引[[0, 2], [1, 2]]来选择行索引[0, 2]列索引[1, 2]即第一行第二列元素2和第三行第三列元素9,结果是一个降维后的一维数组。

切片操作不会进行降维,索引会降维操作

切片操作

切片操作允许你选择数组的一个子集。对于多维数组,你可以同时在多个维度上进行切片。

多维数组的切片操作

# 使用切片选择第一行和第三行
print("使用切片选择的行:\n", arr2d[::2])
# 输出:
# 使用切片选择的行:
# [[1 2 3]
#  [7 8 9]]

在这个示例中,::2表示从第一行开始,每隔一行选择一行,因此选择了第一行和第三行。

布尔索引:基于条件的数据选择

布尔索引是一种基于条件选择数组元素的方法。它使用布尔数组作为索引,这个布尔数组通常是通过对数组应用条件操作得到的。

使用布尔索引过滤数据

假设你有一个数组,你想从中选择满足特定条件的元素。

import numpy as np# 创建一个一维数组
arr = np.array([10, 20, 30, 40, 50])# 创建布尔数组,条件是元素值大于20
filter = arr > 20
print("布尔索引过滤结果:", arr[filter])
# 输出:布尔索引过滤结果: [30 40 50]

在这个示例中,arr > 20创建了一个布尔数组,只有当数组arr中的元素大于20时,相应的位置才是True。然后我们使用这个布尔数组作为索引,选择出所有满足条件的元素。

结语

通过掌握花式索引、布尔索引,你可以在NumPy中进行更加灵活和高效的数组操作。无论是选择特定的数据,还是访问数组的某个区域,这些技术都能帮助你简化代码,提高工作效率。现在,你已经准备好在NumPy的世界中大展拳脚了!

希望这篇文章能帮助你更好地理解和使用NumPy中的高级索引技术,让你的数据分析之旅更加顺畅。

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

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

相关文章

Java 初识

Java 的发展历程 Sun 公司。 Oracle 公司。 普通版本,也叫过渡版本。 正式版本,也叫长期支持版本(LTS)。 Java SE,Java EE,Java ME Java 技术体系分为三个平台:Java SE,Java EE&a…

EasyExcel导出多个sheet封装

导出多个sheet 在需求中&#xff0c;会有需要导出多种sheet的情况&#xff0c;那么这里使用easyexcel进行整合 步骤 1、导入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><d…

多尺度注意力创新

深度之眼17种多尺度注意力创新

西门子PLC学习之数据块的单个实例,多重实例与参数实例间的区别

首先介绍下函数&#xff0c;函数块与数据块这三个概念。 数据块 数据块里可以存储各种类型的参数。有人可能会问&#xff0c;m寄存器不是可以存储布尔值&#xff0c;8位&#xff0c;16位&#xff0c;32位变量吗&#xff0c;为什么要多此一举&#xff1f;因为虽然m寄存器能存储以…

​​​​​​​月薪20K的程序员应具备怎样的技能和水平?

在当今互联网高速发展的时代&#xff0c;程序员的薪资水平也在不断提高。对于月薪20K的程序员来说&#xff0c;他们不仅需要具备扎实的编程基础&#xff0c;还需要掌握一系列与工作相关的技能和能力。 月薪20K的程序员应具备怎样的技能和水平&#xff1f; 相信这是一个很多人都…

Elasticsearch 认证模拟题 - 8

一、题目 在集群中输入以下指令&#xff1a; PUT phones/_doc/1 {"brand":"Samsumg","model":"Galaxy S9","features":[{"type":"os", "value":"Android"},{"type":&q…

@Scheduled注解创建定时任务的 3 种模式

Scheduleed注解的介绍 在Spring Boot中&#xff0c;Scheduled 注解用于创建定时任务&#xff0c;提供了三种常见的模式&#xff1a; Fixed Rate&#xff08;固定速率&#xff09; Fixed Delay&#xff08;固定延迟&#xff09; Cron Expression&#xff08;Cron表达式&…

什么是智慧零售?智慧零售的发展前景如何?

在零售业的快速发展中&#xff0c;市场竞争日益激烈&#xff0c;产品同质化严重&#xff0c;线下销售与线上商店的竞争加剧&#xff0c;资金成本问题日益凸显。这些问题不仅限制了零售业的发展&#xff0c;也给消费者带来了诸多不便。然而&#xff0c;智慧零售的出现&#xff0…

ElementUI中date-picker组件,怎么把大写月份改为阿拉伯数字月份(例如:一月、二月,改为1月、2月)

要将 Element UI 的 <el-date-picker> 组件中的月份名称从中文大写&#xff08;如 "一月", "二月"&#xff09;更改为阿拉伯数字&#xff08;如 "1月", "2月"&#xff09;&#xff0c;需要进行一些定制化处理。可以通过国际化&a…

查看Hive表的描述信息,包括在HDFS上的Location信息

/hive/bin/beeline beeline> !connect jdbc:hive2://ip:10000 输入用户名 输入密码 DESCRIBE FORMATTED 表名; 下面的例子 No rows affected (0.820 seconds) 0: jdbc:hive2://ip:10000> DESCRIBE FORMATTED demo; INFO : Compiling command(queryIdroot_20240601141007…

45-5 护网溯源 - 远控木马样本溯源

在分析恶意样本时&#xff0c;需要查看包括作者名字、ID、IP地址、域名等在内的相关信息。 把恶意样本上传到微步、360沙箱云分析&#xff1a;样本报告-微步在线云沙箱 (threatbook.com) 动态分析 运行截图 发现该木马是与一个装机软件绑定的&#xff0c;你运行正常软件的时候…

封装组件库仿elementui<1>

目录 type属性 引入字体图标 button的点击事件 disabled属性 methods:{//点击事件是外部注册的handleClick(e){this.$emit(click,e)//通知父组件点击了&#xff0c;点了按钮&#xff0c;触发外界的click&#xff1f;传参为事件对象//向父组件派发了click事件} }, type属性…

操作系统基本特性:并发、共享、虚拟、异步

目录 一.并发 1.并发的优势 2.并发的实现 3.并发的应用场景 4.并发的挑战 二.共享 1.共享的优势 2.共享资源的实现机制 3.进程同步和互斥 4.避免冲突和死锁 5.实例分析 文件共享 内存共享 设备共享 三.虚拟 1.虚拟技术的优势 2.虚拟化技术的主要实现 3.实例分…

项目进度管理必备:15款最佳项目进度跟踪工具推荐

15好用的款主流项目进度管理软件&#xff1a;PingCode、Worktile、Trello、Tower、Asana、Smartsheet、Teambition、ClickUp、Wrike、Monday.com、Notion、禅道、飞书、云效、蓝凌。 严格的进度管理有助于更好地控制项目进展&#xff0c;提升团队效率&#xff0c;最终实现项目成…

组合已实现的函数完成K-means算法

本关任务 本关综合前面四个关卡的内容来实现K-means聚类算法。 相关说明 K-means是一类非常经典的无监督机器学习算法&#xff0c;通常在实际应用中用于从数据集中找出不同样本的聚集模式&#xff0c;其基本原理就是类中样本的距离要远远小于类间样本的距离。 K-means聚类算…

减调食谱攻略:美味低卡又健康

早餐主要求质&#xff0c;也就是求营养&#xff0c;更确切的说是“均衡的营养&#xff0c;多重的营养元素”确保每天早餐不重样就差不多了。 早餐主食&#xff1a;蛋羹、糖心水煮蛋&#xff0c;皮蛋瘦肉粥、南瓜粥、小米粥&#xff0c;蒸煮玉米、南瓜、芋头、红薯&#xff0c;…

【Linux】The server quit without updating PID file的几种解决方案

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

Java使用XWPFTemplate将word填充数据,并转pdf

poi-tl poi-tl&#xff08;poi template language&#xff09;是基于Apache POI的Word模板引擎。纯Java组件&#xff0c;跨平台&#xff0c;代码短小精悍&#xff0c;通过插件机制使其具有高度扩展性。 主要处理区域有这么几个模块: 依赖 <dependency><groupId>…

树算法例子

树算法概述 树(Tree)是一种重要的数据结构,在许多算法中都有广泛的应用。 二叉树和红黑树是两种重要的数据结构,广泛应用于提供高效的数据查询和操作。下面,我将给出二叉搜索树(BST)和红黑树(RB Tree)的基本实现: 1. 二叉搜索树 (Binary Search Tree, BST) 二叉搜…

服务器硬件基础知识及运行维护指南

目录 服务器硬件基础知识 1. 中央处理器&#xff08;CPU&#xff09; 2. 内存&#xff08;RAM&#xff09; 3. 存储设备 4. 主板&#xff08;Motherboard&#xff09; 5. 电源供应器&#xff08;PSU&#xff09; 6. 网络接口卡&#xff08;NIC&#xff09; 7. 冷却系统 …