当前位置: 首页 > news >正文

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.lryc.cn/news/614234.html

相关文章:

  • 如何板端编译OpenCV并搭建应用--基于瑞芯微米尔RK3576开发板
  • Spring系列之Spring AI入门
  • MySQL definer does not exist 问题分析
  • 一动鼠标就锁屏,设备活动监控方案的技术实现与应用
  • CPO-SVM分类预测+特征贡献SHAP分析,通过特征贡献分析增强模型透明度,Matlab代码实现,引入SHAP方法打破黑箱限制,提供全局及局部双重解释视角
  • ctrl+alt+方向键导致屏幕旋转的解决方法
  • Atto Round 1 (Codeforces Round 1041, Div. 1 + Div. 2)
  • apiSQL网关调优:释放单节点的最大潜能
  • FreeRTOS---基础知识5
  • 【问题解决】使用patch-package修改node-models中的源码
  • Java 之 多态
  • CSS--后端也有自己的CSS要学
  • 腾讯 WeKnora 深度解析:大模型时代文档理解与检索的技术突破
  • Git 基础操作笔记(速查)
  • 解决:开启魔法后vscode pip命令不能安装中科大python镜像问题
  • Product Hunt 每日热榜 | 2025-08-08
  • 20250808:EasyGBS 对接大华 ICC 平台问题处理
  • 智慧农业温室大棚物联网远程监控与智能监测系统
  • 存储管理、XFS 增量备份恢复、LVM
  • 医疗设备专用电源滤波器的安全设计与应用价值|深圳维爱普
  • 【探展WAIC】从“眼见为虚”到“AI识真”:如何用大模型筑造多模态鉴伪盾牌
  • 显示器同步技术终极之战:G-Sync VS. FreeSync
  • 日本语言学校|ICA国际会话学院:从原始文本到结构化事实的建模实录(工程师向)
  • 888. 公平的糖果交换
  • 机器学习之支持向量机(原理)
  • Go 踩过的坑之协程参数不能过大
  • 四、redis入门之集群部署
  • 惯量时间常数 H 与转动惯量 J 的关系解析
  • UE5 图片9宫格切割
  • B4263 [GESP202503 四级] 荒地开垦 题解