热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NumPy学习指南:深入理解ndarray索引机制

本文详细介绍了NumPy的核心概念——N维数组对象(ndarray),并深入探讨了其索引机制,包括基本索引、切片以及高级索引等。

NumPy 是 Python 中用于科学计算的基础库,其核心功能之一就是提供了强大的 N 维数组对象(ndarray)。本文将详细介绍 ndarray 的结构及其索引方式。


ndarray 对象简介



  • ndarray 是 NumPy 中最基础的数据结构,用于存储同类型的多维数组数据。

  • 每个元素在内存中占用相同的字节空间,确保了高效的存取速度。

  • ndarray 内部包含一个指向实际数据的指针、数据类型描述符(dtype)、数组的形状(shape)以及跨度(stride)信息。


ndarray 的内部结构



  • 数据指针:指向实际数据存储的位置。

  • 数据类型(dtype):描述数组中每个元素的数据类型和大小。

  • 形状(shape):一个元组,表示数组在各个维度上的大小。

  • 跨度(stride):一个元组,表示在每个维度上移动一个单位所需跨越的字节数。


创建 ndarray 的方法



  • 空数组:使用 np.empty() 创建未初始化的数组。

  • 零数组:使用 np.zeros() 创建所有元素均为 0 的数组。

  • 一数组:使用 np.ones() 创建所有元素均为 1 的数组。

  • 全值数组:使用 np.full() 创建所有元素均为指定值的数组。

  • 单位矩阵:使用 np.eye() 创建单位矩阵。

  • 从现有数组创建:使用 np.asarray() 将其他序列转换为 ndarray。

  • 从缓冲区创建:使用 np.frombuffer() 从缓冲区创建数组。

  • 从迭代器创建:使用 np.fromiter() 从迭代器创建数组。

  • 从数值范围创建:使用 np.arange()np.linspace()np.logspace() 从数值范围创建数组。

  • 随机数组:使用 np.random 模块生成随机数组。


ndarray 的索引与切片



  • 基本索引:通过下标访问数组中的单个元素。

  • 切片:类似于 Python 列表的切片操作,用于提取数组的一部分。

  • 高级索引:包括整数数组索引、布尔索引和花式索引。


高级索引示例



  • 整数数组索引:通过整数数组指定多个索引位置。

  • import numpy as np

    x = np.array([[1, 2], [3, 4], [5, 6]])
    t = np.array([[0, 1, 2], [0, 1, 0]])
    y = x[[0, 1, 2], [0, 1, 0]]
    print(y) # 输出: [1 4 5]

  • 布尔索引:通过布尔数组筛选符合条件的元素。

  • x = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
    print(x[x > 5]) # 输出: [ 6 7 8 9 10 11]

    a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
    print(a[~np.isnan(a)]) # 输出: [1. 2. 3. 4. 5.]

    a = np.array([1, 2+6j, 5, 3.5+5j])
    print('非复数:', a[~np.iscomplex(a)]) # 输出: 非复数: [1.+0.j 5.+0.j]
    print('复数:', a[np.iscomplex(a)]) # 输出: 复数: [2.+6.j 3.5+5.j]

  • 花式索引:通过任意数组形式的索引来访问数组。


广播机制


广播机制允许不同形状的数组之间进行算术运算,NumPy 会自动扩展较小的数组以匹配较大的数组形状。


丰富的函数支持


NumPy 提供了大量的数学函数和统计函数,支持各种数组操作,如求和、排序、统计等。


推荐阅读
  • 利用50行Python代码打造经典游戏,既是休闲娱乐,也是编程学习的利器
    Free Python Games 是一个适合学生和初学者的项目,它不仅提供了高度的组织性和灵活性,还极大地激发了用户的探索与理解能力。 ... [详细]
  • 本文详细介绍了Python中的流程控制与条件判断技术,包括数据导入、数据变换、统计描述、假设检验、可视化以及自定义函数的创建等方面的内容。 ... [详细]
  • 本文详细介绍了Python的multiprocessing模块,该模块不仅支持本地并发操作,还支持远程操作。通过使用multiprocessing模块,开发者可以利用多核处理器的优势,提高程序的执行效率。 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 每日一练—0010题:Python生成字母验证码图像
    本题挑战:利用Python编程语言,结合PIL库,创建包含随机字母和数字的验证码图像。 ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 本文详细介绍了MySQL表分区的概念、类型及其在实际应用中的实施方法,特别是针对Zabbix数据库的优化策略。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • DropBlock:一种卷积网络的正则化技术
    本文详细探讨了DropBlock这一正则化方法在卷积神经网络中的应用与效果。通过结构化的dropout方式,即在特征图中连续区域内的单元同时被丢弃,DropBlock有效解决了传统dropout在卷积层应用时效果不佳的问题。更多理论分析及其实现细节可参考原文链接。 ... [详细]
  • 使用Objective-C实现苹果官方NSLayoutConstraint页面布局
    本文详细介绍了如何在iOS开发中使用Objective-C语言通过NSLayoutConstraint来实现页面布局。示例代码展示了如何创建和应用约束,以确保界面元素能够正确地响应不同屏幕尺寸的变化。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • Python闭包深度解析与应用实例
    本文详细介绍了Python闭包的基本概念、必要条件及其实现方式,并通过具体示例说明闭包在提高代码复用性和维护性方面的作用。文章最后还探讨了闭包的内部机制及其在实际项目中的应用。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
author-avatar
bjkml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有