Numpy科学计算与数据分析:Numpy布尔索引与花式索引实战

Numpy高级索引

学习目标

通过本课程,学员将掌握Numpy中布尔索引和花式索引的使用方法,能够灵活运用这些高级索引技术进行复杂的数据操作和处理。

相关知识点

Numpy高级索引

学习内容

1 Numpy高级索引

1.1 布尔索引

布尔索引是Numpy中一种非常强大的索引方式,它允许根据条件来选择数组中的元素。这种索引方式不仅提高了代码的可读性,还极大地简化了数据筛选的过程。在布尔索引中,通常使用一个布尔数组来作为索引,这个布尔数组的每个元素都对应着原数组中的一个元素,布尔值为True的元素会被选中,而布尔值为False的元素则不会被选中。

1.1.1 基本概念

布尔索引的基本概念是通过一个条件表达式生成一个布尔数组,然后使用这个布尔数组来索引原数组。例如,如果有一个数组a,想要选择所有大于5的元素,可以使用a > 5生成一个布尔数组,然后使用这个布尔数组来索引a。

import numpy as np# 创建一个数组
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 生成布尔数组
bool_array = a > 5# 使用布尔数组索引原数组
selected_elements = a[bool_array]print(selected_elements)
1.2 多条件布尔索引

布尔索引不仅支持单个条件,还支持多个条件的组合。可以通过逻辑运算符&(与)、|(或)和~(非)来组合多个条件。例如,如果想要选择所有大于5且小于10的元素,可以使用以下代码:

import numpy as np# 创建一个数组
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 生成多条件布尔数组
bool_array = (a > 5) & (a < 10)# 使用布尔数组索引原数组
selected_elements = a[bool_array]print(selected_elements)
1.3 布尔索引的应用

布尔索引在数据处理中非常有用,特别是在数据清洗和数据筛选中。例如,假设有一个包含学生考试成绩的数组,想要找出所有成绩大于等于60分的学生,可以使用布尔索引:

import numpy as np
# 创建一个包含学生考试成绩的数组
scores = np.array([55, 65, 75, 85, 95, 45, 55, 65, 75, 85])# 生成布尔数组
passing_scores = scores >= 60# 使用布尔数组索引原数组
passing_students = scores[passing_scores]print(passing_students)
1.4 花式索引

花式索引是Numpy中另一种高级索引方式,它允许使用一个整数数组来索引另一个数组。这种索引方式非常灵活,可以用于选择数组中的任意元素,而不仅仅是连续的元素。花式索引的一个重要特点是,它返回的是一个新数组,而不是一个视图。

1.4.1 基本概念

花式索引的基本概念是使用一个整数数组来指定要选择的元素的索引。例如,如果有一个数组a,想要选择索引为1、3和5的元素,可以使用以下代码:

import numpy as np
# 创建一个数组
a = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])# 创建一个整数数组,指定要选择的元素的索引
index_array = np.array([1, 3, 5])# 使用整数数组索引原数组
selected_elements = a[index_array]print(selected_elements)
1.5 多维数组的花式索引

花式索引不仅适用于一维数组,还适用于多维数组。在多维数组中,可以使用多个整数数组来指定每个维度上的索引。例如,假设有一个二维数组b,想要选择第0行的第1列和第2列的元素,以及第1行的第0列和第2列的元素,可以使用以下代码:

import numpy as np
# 创建一个二维数组
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 创建两个整数数组,分别指定行索引和列索引
row_indices = np.array([0, 1])
col_indices = np.array([1, 2])# 使用整数数组索引原数组。【row_indices,col_indices】,先选行,后选列,定位到具体元素值。
selected_elements = b[row_indices, col_indices]print(selected_elements)
1.6 花式索引的应用

花式索引在数据处理中也非常有用,特别是在需要选择不连续的元素时。例如,假设有一个包含多个城市温度数据的二维数组,想要选择特定城市的温度数据,可以使用花式索引:

import numpy as np
# 创建一个包含多个城市温度数据的二维数组
temperatures = np.array([[20, 25, 30], [22, 27, 32], [24, 29, 34]])# 创建一个整数数组,指定要选择的城市索引。
city_indices = np.array([0, 2])# 使用整数数组索引原数组。【行(city_indices),列(无)】
selected_temperatures = temperatures[city_indices]print(selected_temperatures)
1.7 高级索引的应用场景

高级索引技术在数据科学和机器学习中有着广泛的应用。以下是一些常见的应用场景:

1.7.1 数据清洗

在数据清洗过程中,经常需要根据某些条件来筛选数据。布尔索引和花式索引可以帮助高效地完成这些任务。例如,假设有一个包含用户信息的数据集,想要删除所有年龄小于18岁的用户,可以使用布尔索引:

import numpy as np
# 创建一个包含用户信息的数据集
users = np.array([[1, 25], [2, 17], [3, 30], [4, 16], [5, 22]])# 生成布尔数组,选择年龄大于等于18岁的用户
valid_users = users[users[:, 1] >= 18]print(valid_users)
1.7.2 数据分析

在数据分析中,经常需要根据某些条件来选择数据进行分析。布尔索引和花式索引可以帮助快速地选择所需的数据。例如,假设有一个包含股票价格的数据集,想要计算所有价格大于100的股票的平均价格,可以使用布尔索引:

import numpy as np
# 创建一个包含股票价格的数据集
stock_prices = np.array([120, 90, 150, 80, 110, 130])# 生成布尔数组,选择价格大于100的股票
high_prices = stock_prices[stock_prices > 100]# 计算平均价格
average_price = np.mean(high_prices)print(average_price)
1.7.3 机器学习

在机器学习中,经常需要根据某些条件来选择训练数据或测试数据。布尔索引和花式索引可以帮助高效地完成这些任务。例如,假设有一个包含特征和标签的数据集,想要选择所有标签为1的数据进行训练,可以使用布尔索引:

import numpy as np
# 创建一个包含特征和标签的数据集
data = np.array([[1.2, 2.3, 1], [2.1, 3.4, 0], [3.2, 4.5, 1], [4.1, 5.6, 0]])# 生成布尔数组,选择标签为1的数据
training_data = data[data[:, 2] == 1]print(training_data)

1. Numpy入门:数组操作与科学计算基础
2. Numpy入门:多平台安装与基础环境配置
3. Numpy数组创建与应用入门
4. Numpy数组属性入门:形状、维度与大小
5. Numpy数组索引与切片入门
6. Numpy数组操作入门:合并、分割与重塑
7. Numpy数学函数入门与实践
8. Numpy数据分析基础:统计函数应用
9. Numpy随机数生成入门
10. Numpy线性代数基础与实践
11. Numpy文件操作入门:数组数据的读取与保存
12. Numpy广播机制入门与实践
13. Numpy布尔索引与花式索引实战
14. Numpy高效数据处理与优化
15. Numpy数据分析与图像处理入门

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

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

相关文章

【Linux】patch补丁的生成与使用方法总结

引言 在 Linux 和开源世界中&#xff0c;patch 是一个极其强大且常用的工具。它允许开发者和系统管理员以增量方式修改文件&#xff0c;特别适用于源代码的更新、错误修复、功能补丁的分发与应用。 目录 引言 一、patch介绍 二、生成补丁文件 三、补丁文件内容解析 四、p…

杂谈 001 · VScode / Copilot 25.08 更新

原文链接https://www.castamerego.com/blog/talk-001 2025.08.08 , VS code 发布八月更新&#xff0c;同一天 Copilot 也更新了 GPT-5, 浅体验一下 VS code 更新 发行说明更新页面内跳转显示 AI 比例页面内跳转 Copilot 更新 对话回溯 checkpoints页面内跳转进度列表页面内…

微软发布Project Ire项目:可自主检测恶意软件的人工智能系统

微软Project Ire项目利用AI自主逆向工程并分类软件性质微软近日公布了Project Ire项目&#xff0c;这是一个能够自主进行逆向工程并分类软件性质的人工智能&#xff08;AI&#xff09;系统。该系统由大型语言模型&#xff08;LLM&#xff09;驱动&#xff0c;通过使用反编译器等…

k8s核心组件——kubelet详解

&#x1f680;Kubernetes 核心组件解析&#xff1a;什么是 Kubelet&#xff1f;它的作用是什么&#xff1f; 在 Kubernetes&#xff08;K8s&#xff09;集群中&#xff0c;Kubelet 是最重要的 Node 组件之一&#xff0c;它负责管理和维护 Pod 的生命周期&#xff0c;确保容器在…

C++ 部署LSTM(.onnx)

0、 背景 在工业自动化控制领域&#xff0c;预测某些变量是否关键。根据工厂的数据&#xff0c;训练好模型之后&#xff0c;将其转我通用的onnx 模型&#xff0c;并实现高效的推理。 模型训练 import numpy as np from para import * from data_utils import MyDataset from da…

深度学习-卷积神经网络CNN-1×1卷积层

1x1卷积核&#xff0c;又称为网中网&#xff08;Network in Network&#xff09;&#xff1a;NIN卷积的本质是有效提取相邻像素间的相关特征&#xff0c;而11的卷积显然没有此作用。它失去了卷积层的特有能力——在高度和宽度维度上&#xff0c;识别相邻元素间相互作用的能力。…

使用 Python 异步爬虫抓取豆瓣电影Top250排行榜

导读 在现代网络爬虫开发中,面对 海量网页数据、慢速响应的网络接口,传统的同步爬虫方式已经不能满足高效抓取需求。本文将手把手带你构建一个 基于 aiohttp + asyncio 的异步爬虫系统,实战目标是抓取豆瓣电影 Top250 排行榜中的电影名称、评分和详情页地址。 目录 导读 …

云原生开发全面解析:从核心理念到实践挑战与解决方案

1. 云原生开发的核心理念与定义 云原生&#xff08;Cloud Native&#xff09;是一种基于云计算环境设计和运行应用程序的方法论&#xff0c;其三大技术支柱为容器化、微服务和声明式API。根据CNCF定义&#xff0c;云原生技术通过标准化接口和自动化管理&#xff0c;使应用具备…

WebForms 实例

WebForms 实例 引言 WebForms 是 ASP.NET 技术中的一种重要技术,它允许开发者以表单的形式创建动态网页。本文将通过具体的实例,深入探讨 WebForms 的基本概念、实现方法以及在实际项目中的应用。 WebForms 简介 WebForms 是一种用于创建动态网页的框架,它允许开发者以类…

Java 之 多态

一、多态 多态故名思义&#xff0c;多种状态。比如Animal 这个类中&#xff0c;eat 方法是 公共的方法&#xff0c;但是当 People&#xff0c;Dog , Cat,继承时&#xff0c;我们知道人要吃的是米饭&#xff0c;狗要吃的是狗粮&#xff0c;猫要吃的是猫粮。所以当不同类型的引用…

文件结构树的├、└、─ 符号

目录一、├、└、─符号的背景二、├、└、─ 符号的含义2.1 ├ 带竖线的分支符号2.2 └不带竖线的分支符号2.3 ─横线符号三、Windows系统中生成目录树一、├、└、─符号的背景 我们在编程中&#xff0c;可能会经常遇到一些特殊符号├、└、─。这并非偶然&#xff0c;二十由…

微软XBOX游戏部门大裁员

近日有报道称&#xff0c;微软正计划对Xbox游戏部门进行另外一次裁员&#xff0c;影响的将是整个团队&#xff0c;而不是特定岗位或者部门&#xff0c;大概10%至20%的Xbox团队成员受到影响&#xff0c;这是微软这次对Xbox业务重组的一部分。 据报道&#xff0c;微软已经开始新…

【关于Java 8 的新特性】

问&#xff1a;“Java 8 有啥新东西&#xff1f;” 你憋了半天&#xff0c;只说出一句&#xff1a;“嗯……有 Lambda 表达式。”别慌&#xff01;Java 8 可不只是“语法糖”那么简单。它是一次真正让 Java 从“老派”走向“现代” 的大升级&#xff01;一、Lambda 表达式&…

《嵌入式数据结构笔记(六):二叉树》

1. ​​树数据结构的基本定义和属性​​树是一种重要的非线性数据结构&#xff0c;用于表示层次关系。​​基本定义​​&#xff1a;树是由 n&#xff08;n ≥ 0&#xff09;个结点组成的有限集合。当 n 0 时&#xff0c;称为空树&#xff1b;当 n > 0 时&#xff0c;树必须…

sqlite的sql语法与技术架构研究

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考&#xff1a;参考提示词与豆包AI交互输出内容。 sqlite作为最常用的本地数据库&#xff0c;其支持的sql语法也比较全面&#xff0c;历经了二十多年经久不衰&#xff0c;其技术架构设计也是非常优秀的。 一&#xff1a…

Javascript中的一些常见设计模式

1. 单例模式&#xff08;Singleton Pattern&#xff09; 核心思想 一个类只能有一个实例&#xff0c;并提供一个全局访问点。 场景 全局缓存Vuex / Redux 中的 store浏览器中的 localStorage 管理类 示例 const Singleton (function () {let instance;function createInstance…

2025 年最佳 AI 代理:工具、框架和平台比较

目录 什么是 AI Agents 应用 最佳 AI Agents&#xff1a;综合列表 LangGraph AutoGen CrewAI OpenAI Agents SDK Google Agent Development Kit (ADK) 最佳no-code和open-source AI Agents Dify AutoGPT n8n Rasa BotPress 最佳预构建企业 AI agents Devin AI …

Linux 学习 ------Linux 入门(上)

Linux 是一种自由和开放源代码的类 Unix 操作系统。它诞生于 1991 年&#xff0c;由芬兰程序员林纳斯・托瓦兹&#xff08;Linus Torvalds&#xff09;发起并开发。与 Windows 等闭源操作系统不同&#xff0c;Linux 的源代码是公开的&#xff0c;任何人都可以查看、修改和传播&…

[202403-E]春日

[202403-E]春日 题目背景 春水初至&#xff0c; 文笔亦似花开。 题目描述 坐看万紫千红&#xff0c; 提笔洋洋洒洒&#xff0c; 便成篇文章。 现在给你这篇文章&#xff0c; 这篇文章由若干个单词组成&#xff0c; 没有标点符号&#xff0c; 两两单词之间由一个空格隔开。 为了…

Unity笔记(三)——父子关系、坐标转换、Input、屏幕

写在前面写本系列的目的(自用)是回顾已经学过的知识、记录新学习的知识或是记录心得理解&#xff0c;方便自己以后快速复习&#xff0c;减少遗忘。这里只有部分语法知识。九、父子关系1、获取、设置父对象(1)获取父对象可以通过this.transform.parent获取当前对象的父对象Trans…