当前位置: 首页 > 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.dtcms.com/a/321135.html

相关文章:

  • 一种对白点进行多重加权并利用三角剖分插值微调白平衡增益的白平衡矫正算法
  • RAG问答系统:Spring Boot + ChromaDB 知识库检索实战
  • 3D Tiles 格式中,Bounding Volum
  • 基于AutoDL平台的3D_Gaussian_Splatting初体验
  • 在 Vue 中使用 ReconnectingWebSocket实现即时通讯聊天客服功能
  • 2025 前端真实试题-阿里面试题分析
  • 关于数据结构6-哈希表和5种排序算法
  • Maptalks vs Cesium
  • 【最新版】2025年搜狗拼音输入法
  • “电子合同”为什么会出现无效的情况?
  • OpenCV cv2.flip() 函数详解与示例
  • 深入理解 Java AWT Container:原理、实战与性能优化
  • ORACLE看当前连接数的方法
  • 柠檬笔试——野猪骑士
  • 南方略咨询与与清源科技正式启动国际市场GTM流程规划咨询项目!!!
  • 汽车电子:现代汽车的“神经中枢“
  • Eyevinn 彻底改变开源部署模式
  • 小孙学变频学习笔记(十三)电动机参数的自动测量 矢量控制的转速反馈
  • 如何 让ubuntu 在root 下安装的docker 在 普通用户下也能用
  • Spring Boot 结合 CORS 解决前端跨域问题
  • GitLab同步提交的用户设置
  • 2025年渗透测试面试题总结-08(题目+回答)
  • 【19】C#实战篇—— C# 绘制点划线,绘制虚线——PointF dxdy,过x点垂直画红色点划线,长度为W,过y点水平画红色点划线,长度为H
  • 华清远见25072班C语言学习day5
  • 自动驾驶数据闭环
  • 进程管理、系统高负载、cpu超过800%等实战问题处理
  • 机器人权利:虚实之间的伦理与法理探界
  • F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代
  • 【Oracle Linux 9.6】切换默认为命令行模式
  • git如何使用和操作命令?