博客
关于我
numpy数组索引-ChatGPT4o作答
阅读量:793 次
发布时间:2023-02-17

本文共 2304 字,大约阅读时间需要 7 分钟。

NumPy 数组索引技巧

在 NumPy 中,索引是访问、修改和切片数组元素的核心工具。NumPy 提供了比 Python 列表更强大的索引功能,能够处理多维数组和多种索引方式。本文将详细介绍 NumPy 数组索引的常见技巧。

1. 基本索引

基本索引与 Python 列表类似,支持整数索引和切片操作。

1.1 一维数组索引

对于一维数组,索引操作非常简单。

import numpy as np# 创建一维数组arr = np.array([10, 20, 30, 40, 50])# 访问单个元素print(arr[0])  # 输出 10print(arr[2])  # 输出 30# 切片操作print(arr[1:4])  # 输出 [20, 30, 40] (从索引1到3的元素)print(arr[:3])   # 输出 [10, 20, 30] (前3个元素)print(arr[::2])  # 输出 [10, 30, 50] (间隔为2)
1.2 二维数组索引

对于二维数组,索引通过行和列来访问元素。

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 访问单个元素print(arr[0, 1])  # 输出 2 (第1行第2列的元素)# 访问整行或整列print(arr[1, :])  # 输出 [4, 5, 6] (第2行的所有元素)print(arr[:, 2])  # 输出 [3, 6, 9] (第3列的所有元素)# 切片操作print(arr[0:2, 1:3])  # 输出 [[2, 3], [5, 6]] (第1到第2行,第2到第3列)
1.3 高维数组索引

对于高维数组,索引方式类似,但维度数增加。

arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])# 访问单个元素print(arr[0, 1, 1])  # 输出 4 (第1组第2行第2列的元素)

2. 布尔索引

布尔索引通过生成布尔数组来筛选数组中的元素。

arr = np.array([10, 20, 30, 40, 50])# 生成布尔条件数组mask = arr > 25# 使用布尔数组索引print(arr[mask])  # 输出 [30, 40, 50] (筛选出大于25的元素)# 直接写条件表达式print(arr[arr > 25])  # 输出 [30, 40, 50]# 对于二维数组也可以使用布尔索引arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])# 筛选出大于30的元素print(arr[arr > 30])  # 输出 [40, 50, 60, 70, 80, 90]

3. 花式索引(Fancy Indexing)

花式索引允许通过整数数组来访问多个元素。

3.1 一维数组花式索引
arr = np.array([10, 20, 30, 40, 50])# 使用整数数组索引indices = [0, 2, 4]print(arr[indices])  # 输出 [10, 30, 50]
3.2 二维数组花式索引
arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])# 行索引和列索引rows = [0, 2]cols = [1, 2]print(arr[rows, cols])  # 输出 [20, 30, 80, 90]

4. 使用 np.newaxis 增加维度

np.newaxis 用于在数组中添加新维度,用于广播或形状转换。

arr = np.array([10, 20, 30])# 转换为行向量arr_2d = arr[np.newaxis, :]print(arr_2d)  # 输出 [[10, 20, 30]]# 转换为列向量arr_2d_col = arr[:, np.newaxis]print(arr_2d_col)  # 输出 [[10], [20], [30]]

5. 索引更新

NumPy 允许通过索引直接修改数组元素。

arr = np.array([10, 20, 30, 40, 50])# 修改数组元素arr[1:3] = [200, 300]print(arr)  # 输出 [10, 200, 300, 40, 50]

6. 使用 np.index_exp 索引复杂数组

np.index_exp 提供了简洁的方式来创建复杂索引。

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 创建复杂索引print(arr[np.index_exp[1, 1]])  # 输出 5 (第2行第2列的元素)

7. 修改数组形状

通过索引和切片改变数组形状。

arr = np.array([1, 2, 3, 4, 5, 6])# 修改数组形状reshaped_arr = arr.reshape(2, 3)print(reshaped_arr)  # 输出 [[1, 2, 3], [4, 5, 6]]

总结

NumPy 提供了强大的索引机制,使得数据处理更加高效。常见索引方式包括基本索引、布尔索引、花式索引、np.newaxis、索引更新以及 np.index_exp 等。掌握这些技巧能够大大提升 NumPy 应用程序的性能和效率。

转载地址:http://jwnfk.baihongyu.com/

你可能感兴趣的文章
Netty工作笔记0011---Channel应用案例2
查看>>
Netty工作笔记0013---Channel应用案例4Copy图片
查看>>
Netty工作笔记0014---Buffer类型化和只读
查看>>
Netty工作笔记0020---Selectionkey在NIO体系
查看>>
Vue踩坑笔记 - 关于vue静态资源引入的问题
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0077---handler链调用机制实例4
查看>>
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>
Netty核心模块组件
查看>>
Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
查看>>
Netty源码—2.Reactor线程模型一
查看>>
Netty源码—4.客户端接入流程一
查看>>
Netty源码—4.客户端接入流程二
查看>>
Netty源码—5.Pipeline和Handler一
查看>>
Netty源码—6.ByteBuf原理二
查看>>