(3)numpy数组的索引和切片操作

2023-11-19

在开始之前,先导入numpy第三方包:

import numpy as np

【索引】

谈到索引,我们就应该想到,在python语言中,是如何对列表进行索引的?

接下来将会对python列表索引和numpy数组索引进行比较:

# 先定义一个numpy数组
array = np.array([[1, 2, 4], [31, 2, 4]])
# 常规方法访问第一维的第一个数字“1”:
print("常规方法访问结果:", array[0][0])
# numpy数组访问第一维的第一个数组“1”:
print("numpy数组访问结果:", array[0, 0])

运行结果:

        通过代码两者之间的代码对比,我们可以很清楚的看到,在书写代码上,两者唯一的区别就是“用了几个括号?”

numpy数组这样进行索引的目的是什么?或者说,这样进行索引,会给我们带来什么便捷之处吗?

这就不得不提高numpy数组的高级索引了。

在numpy数组中,存在许多种高级索引,接下来将一一介绍:

(高级应用1):

特点:以列表形式访问元素时,将根据列表元素进行索引,所得到数组依旧是一个numpy数组:

应用途径:可以借此对列表中元素进行重新排序

arr = np.array([0, 1, 2, 3, 4])
result_things = arr[[0, 1, 2]]
print("arr第0-2的元素依次为:", result_things, result_things.dtype)

运行结果

         通过运行结果就可以得出,当传入参数是一个列表时,会根据下标索引生成一个新的numpy数组,这个数组的元素类型和原数组的元素类型一致。

(高级应用2):

特点:传入一个布尔列表,对应传入参数为True的元素,将被保留下来,重新形成一个numpy数组

bool_list = [True, False, True, True, False]
print("下标索引为0、2、3的元素依次为:", arr[bool_list])

运行结果

 True=输出

False=不输出

(高级应用3):

特点:建立在高级应用2之上,如下例代码中,求numpy数组中,大于2的元素,对numpy数组中的元素直接进行比大小操作,会返回一组由布尔值构成的numpy数组,符合要求的值,将会返回True,反之,则返回False;再将得到的(由布尔值组成)列表传入,即再应用一边高级用法2,可以得到符合要求的数组

list_return = arr > 2
print(list_return, "\n", "在数组arr中大于2的元素有:", arr[list_return])

运行结果

(综合操作):

# matrix:矩阵
int_matrix = np.random.randint(0, 10, size=(4, 3, 2))
print(int_matrix)
print("数组int_matrix中索引位置为[1][2]的元素为:", int_matrix[1, 2])
运行结果

 

【切片操作】

特点:所有的切片方式都是“左闭右开”;在进行切片操作时,无论多少维,都是使用“冒号”来表示,使用“逗号”来分割

(一维数组的切片操作):

# 一维数组的切片操作:
# 一维numpy数组的切片方式和列表完全一致,多维度时同理
arr_1 = [0, 1, 2, 3, 4, 5]
print("arr_1数组中,下标索引从0-2(不包括2)的元素为:", arr_1[0:2])

运行结果

(二维数组的切片操作):

        在对二维数组进行切片操作时,会先让其随机生成一个二维numpy数组,随后再对其进行操作。

特点:从本质上来说,二维numpy数组的切片操作,其实和C语言数组切片操作大同小异,可以带入部分思维去思考,能更好的理解。

arr_2 = np.random.randint(0, 100, size=(4, 5))
print(arr_2)
print("arr_2前两行元素为:\n", arr_2[0:2])
print("arr_2前两列元素为:\n", arr_2[:, 0:2])

运行结果

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(3)numpy数组的索引和切片操作 的相关文章

  • Python的unpack中的逗号是什么意思?

    我们可以简单地使用 crc struct unpack gt i data 为什么人们这样写 crc struct unpack gt i data 逗号是什么意思 第一个变体返回一个单元素元组 In 13 crc struct unpac
  • python的_random是什么?

    如果你打开random py看看它是如何工作的 它的类Random子类 random Random import random class Random random Random Random number generator base
  • 如何在 pygame 中聚焦光线或如何仅绘制窗口的某些圆形部分?

    对于这一点 如果您熟悉它 请想想 超级马里奥制造2 中嘘关卡中的黑暗模式 我试图在角色周围创建一个圆形聚光灯 这也将使圆圈范围内的任何内容都可见 例如部分站在地板上 敌人或场景中的任何其他物体 我的计划是首先绘制圆圈 聚光灯 然后绘制场景
  • 如何更改条形图上的 y 轴限制?

    我有一个df 我从中索引了europe n我绘制了一个条形图 europe n r 5 c 45 looks like this df Country string df Population numeric 变量 plt bar df C
  • Python MySQL 模块

    我正在开发一个需要与 MySQL 数据库交互的 Web 应用程序 但我似乎找不到任何真正适合 Python 的模块 我特别寻找快速模块 能够处理数十万个连接 和查询 所有这些都在短时间内完成 而不会对速度产生重大影响 我想我的答案将是游戏领
  • int 对象在尝试对数字的数字求和时不可迭代? [复制]

    这个问题在这里已经有答案了 我有这个代码 inp int input Enter a number for i in inp n n i print n 但它抛出一个错误 int object is not iterable 我想通过将每个
  • 使用子图绘制 pandas 数据框 (subplots=True):放置图例并使用紧凑的布局

    我真的很喜欢 pandas 来处理和分析大数据集 到目前为止 我主要使用 matplotlib 进行绘图 但现在想使用 pandas 自己的绘图功能 基于 matplotlib 因为它需要更少的代码 并且在大多数情况下对我来说似乎足够了 尤
  • Python变量赋值问题

    a b 0 1 while b lt 50 print b a b b a b 输出 1 2 4 8 16 32 wheras a b 0 1 while b lt 50 print b a b b a b 输出 正确的斐波那契数列 1 1
  • 在 Windows 上将 NumPy 与 BLAS 链接

    我正在尝试在 Windows 系统上安装 Theano 并且需要安装 BLAS 和 LAPACK 我的 System32 文件夹中有这些的 dll 文件 当我运行 numpy config来自 Anaconda 的 show 库的路径正确显
  • Python 函数可能会引发哪些异常? [复制]

    这个问题在这里已经有答案了 Python 中有什么方法可以确定 内置 函数可能引发哪些异常 例如 文档 http docs python org lib built in funcs html http docs python org li
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 将数据框列打包到 pandas 中列出

    我需要将 pandas DataFrame 列打包到包含列表的一列中 例子 For gt gt gt df a b c 0 81 88 1 1 42 7 23 2 8 37 63 3 18 22 20 制作列表栏 list col 0 81
  • 在 (i)python 脚本中从 jupyter 内核获取输出

    我想从单个 ipython 会话中打开多个内核 在这些内核上运行代码 然后收集结果 但我不知道如何收集结果 甚至不知道如何查看 stdout stderr 我怎样才能做这些事情呢 到目前为止我所得到的 我已经使用如下代码管理了前两个步骤 打
  • 多线程写入文件

    前几天刚开始使用 python 对多线程的整个概念还很陌生 我在多线程时写入文件时遇到问题 如果我按照常规方式执行此操作 它会不断覆盖正在写入的内容 使用 5 个线程写入文件的正确方法是什么 不降低性能的最佳方法是在所有线程之间使用队列 每
  • 具有条件的重复行 pandas dataframe python

    我的数据框有问题 我的 df 是 product power brand product 1 3 x 1500W brand A product 2 2x1000W 1x100W product 3 1x1500W 1x500W brand
  • 避免在列表理解中计算相同的表达式两次[重复]

    这个问题在这里已经有答案了 我在列表理解中使用一个函数和一个 if 函数 new list f x for x in old list if f x 0 令我恼火的是这个表达f x 在每个循环中计算两次 有没有办法以更清洁的方式做到这一点
  • Python 类方法的示例用例是什么?

    我读了Python 中的类方法有什么用 https stackoverflow com questions 38238 what are class methods in python for但那篇文章中的例子很复杂 我正在寻找 Pytho
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • Python pip 安装错误 [SSL: CERTIFICATE_VERIFY_FAILED]

    我已经尝试解决这个问题有一段时间了 由于某种原因 我陷入了 ssl 问题 并且不知道发生了什么 问题 我已经安装了 python2 7 和 easy install2 7 但是当尝试使用 easy install2 7 安装 pip 时 出

随机推荐