【numpy基础】--数组索引

这篇具有很好参考价值的文章主要介绍了【numpy基础】--数组索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组索引是指在numpy数组中引用特定元素的方法。
numpy的数组索引又称为fancy indexing,比其他编程语言的索引强大很多。

1. 选取数据

numpy的索引除了像其他语言一样选择一个元素,还可以间隔着选取多个元素,也可以用任意的顺序选取元素。

比如一维数组:

arr = np.random.randint(0, 10, 5)
print(arr)
#运行结果
[7 2 6 2 1]

indexes = [0, 2, 3]
print(arr[indexes])
#运行结果
[7 6 2]

indexes = [4, 0, 2]
print(arr[indexes])
#运行结果
[1 7 6]

从上面的示例看出,通过传入 indexes 数组,可以一次选择多个元素。
indexes 数组中的值代表数组arr的下标,从0开始。

对于二维数组:

arr = np.random.randint(0, 10, (5,5))
print(arr)
#运行结果
[[5 7 3 3 2]
 [2 5 6 3 6]
 [4 1 1 0 1]
 [6 5 8 9 1]
 [2 6 5 2 0]]

rows = np.array([3, 1, 4])
cols = np.array([3, 0, 1])

print(arr[rows, cols])
#运行结果
[9 2 6]

这里 rowscols 分别代表行和列的索引,从0开始。
运行结果选取的是单个元素,分别是:arr[3, 3]arr[1, 0]arr[4, 1]

如果要从二维数组中通过选取行列,而不是选取单个元素的话:

arr = np.random.randint(0, 10, (5,5))
print(arr)
#运行结果
[[4 2 6 6 4]
 [1 8 8 1 9]
 [5 9 2 1 3]
 [8 9 1 6 9]
 [5 4 3 5 6]]

rows = np.array([3, 1, 4])
cols = np.array([3, 0, 1])

arr[rows[:, np.newaxis], cols]
#运行结果
[[6 8 9]
 [1 1 8]
 [5 5 4]]

arr[rows[:, np.newaxis], cols] 是先选取3,1,4 行,得到:

[[8 9 1 6 9]
[1 8 8 1 9]
[5 4 3 5 6]]

然后选取3,0,1 列,得到:

[[6 8 9]
[1 1 8]
[5 5 4]]

2. 与切片结合

fancy indexing可以和之前数组的切片操作相结合:

arr = np.random.randint(0, 10, (5,5))
print(arr)
#运行结果
[[4 2 6 6 4]
 [1 8 8 1 9]
 [5 9 2 1 3]
 [8 9 1 6 9]
 [5 4 3 5 6]]

rows = np.array([3, 1, 4])
cols = np.array([3, 0, 1])

#切片在行上
print(arr[:2, cols])
#运行结果
[[6 4 2]
 [1 1 8]]

#切片在列上
print(arr[rows, 1:])
#运行结果
[[9 1 6 9]
 [8 8 1 9]
 [4 3 5 6]]

arr[:2, cols] 先选择前2行,然后按照 cols 顺序选择列。
arr[rows, 1:] 按照 rows 顺序选择行,然后选择后4列。

3. 与掩码结合

fancy indexing也可以和之前介绍的掩码相结合来过滤数组:

arr = np.random.randint(0, 10, (5,5))
print(arr)
#运行结果
[[4 2 6 6 4]
 [1 8 8 1 9]
 [5 9 2 1 3]
 [8 9 1 6 9]
 [5 4 3 5 6]]

rows = np.array([3, 1, 4])
mask = np.array([True, False, False, False, True])

print(arr[rows[:, np.newaxis], mask])
#运行结果
[[8 9]
 [1 9]
 [5 6]]

arr[rows[:, np.newaxis], mask] 先按照 rows 的顺序选择行,然后用mask过滤掉 False 的列。
最后剩下的是 3,1,4 行的 第一列**最后一列**

4. 修改数据

最后,fancy indexing还有个重要的作用是修改数据,我们通过fancy indexing选取数据之后,可以直接修改它们。

arr = np.random.randint(0, 10, (5,5))
print(arr)
#运行结果
[[6 4 7 8 1]
 [0 3 5 0 6]
 [8 9 4 7 0]
 [3 0 0 9 1]
 [4 5 5 0 5]]

rows = np.array([3, 1, 4])
cols = np.array([3, 0, 1])

arr[rows, cols] = [100] * len(arr[rows, cols])
print(arr)
#运行结果
[[  6   4   7   8   1]
 [100   3   5   0   6]
 [  8   9   4   7   0]
 [  3   0   0 100   1]
 [  4 100   5   0   5]]

上面的示例中,将fancy indexing选取出的值修改为100。
注意[100] * len(arr[rows, cols]) 这个代码是根据fancy indexing选取出的元素个数来决定将几个值修改成100

5. 总结回顾

numpy数组索引的意义在于它可以使数组中的数据更加灵活和易于管理。
通过使用索引,开发人员可以快速访问数组中的特定元素,而不需要遍历整个数组。
这可以大大加快计算速度和减少内存使用。

此外,数组索引还可以用于数组的重构和维护。
通过对数组索引的有效使用,开发人员可以轻松地修改和维护数组中的数据,而不会影响到其他使用该数组的程序。文章来源地址https://www.toymoban.com/news/detail-514599.html

到了这里,关于【numpy基础】--数组索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Numpy入门基础(一)创建数组

    1- np.array() 参数众多,初学时只要关注基本用法。 元组、列表转换 内置函数 range() 数组副本copy,开辟一块新内存复制原数组 主要参数: dtype=     数组元素的数据类型,可选 copy=      对象是否需要复制,可选 order=     创建数组的样式,C为行方向,F为列方向,A为任意方

    2024年02月14日
    浏览(45)
  • Python Numpy入门基础(二)数组操作

    NumPy是Python中一个重要的数学运算库,它提供了了一组多维数组对象和一组用于操作这些数组的函数。以下是一些NumPy的主要特点: 多维数组对象:NumPy的核心是ndarray对象,它是一个多维数组对象,可以容纳任意数据类型。 矢量化操作:使用NumPy的函数,可以对整个数组进行

    2024年02月15日
    浏览(46)
  • 【Python 零基础入门】Numpy 常用函数 数组操作 & 数学运算

    Numpy (Numerical Python) 是 Python 编程语言的一个扩展程序库, 支持大量的维度数组与矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组来存储和处理大型数据集, 从而提供了一个高效的方式来进行数值计算, 特别是对于矩阵预算和线性代数. np.assarray 可以将输入转换为

    2024年02月05日
    浏览(49)
  • 【数据分析之道-NumPy(三)】numpy切片与索引

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2023年04月09日
    浏览(47)
  • 【Python Numpy教程】切片和索引

    NumPy是Python中用于科学计算的重要库之一,它提供了多维数组对象和许多用于操作这些数组的函数。在本教程中,我们将探讨NumPy中的数组切片和索引,这是使用NumPy进行数据处理和分析时的关键概念。数组切片和索引使您能够访问、操作和修改NumPy数组的元素,对于数据处理

    2024年02月03日
    浏览(36)
  • Numpy-改变数组维度_数组的拼接

    处理数组的一项重要工 作就是改变数组的维度,包含提高数组的维度和降低数组的维度,还包括数组的转置Numpy 提供的大量API可以很轻松地完成这些数组的操作。 例如,通过 reshape 方法可以将一维数组变成二维、三维或者多维数组。 通过 ravel 方法或 flatten 方法可以将多维数

    2024年02月15日
    浏览(42)
  • NumPy数组基本用法

    Numpy是Python科学计算库,用于快速处理任意维度的数组。 NumPy提供一个N维数组类型ndarray,它描述了相同类型的“items”的集合。 numpy.ndarray支持向量化运算。 NumPy使用c语言写的,底部解除了GIL,其对数组的操作速度不在受python解释器限制。 python一个列表中可以存储多种数据类

    2024年02月09日
    浏览(45)
  • Numpy 数组切片

    1.1、切片原理 列表切片是从原始列表中提取列表的一部分的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。 规则: 1.2、切片使用 1.2.1、获取列表

    2023年04月19日
    浏览(47)
  • 一文弄懂numpy数组

    前言 学习数据分析,必绕不开numpy和pandas这两个库,numpy的ndarray数据结构和矩阵数据非常类似,最近搞科研的时候总是会用到,之前学的都忘记完了,所以,这次打算把numpy库的基本用法记录在一篇文章里,以便后面复习和使用。 ndarray多维数组创建 不要管复杂的概念,我们

    2024年02月05日
    浏览(58)
  • numpy中数组的操作

    目录 一:数组的属性 二:翻转数组 三:数组的计算 一:数组的属性 NumPy 数组(通常称为 ndarray)有许多有用的属性,这些属性可以帮助你了解数组的各个方面。以下是一些主要的属性: dtype:这是数组的数据类型,如 int32, float64, complex128 等。你可以使用它来查看或修改数

    2024年01月20日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包