02-Numpy基础-ndarray

news2025/1/21 10:23:19

NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。

NumPy的部分功能如下:

  • ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
  • 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
  • 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 用于集成由C、C++、Fortran等语言编写的代码的AC API。

对于大部分数据分析应用而言,我最关注的功能主要集中在:

  • 用于数据整理和清理、子集构造和过滤、转换等快速的矢量化数组运算。
  • 常用的数组算法,如排序、唯一化、集合运算等。
  • 高效的描述统计和数据聚合/摘要运算。
  • 用于异构数据集的合并/连接运算的数据对齐和关系型数据运算。
  • 将条件逻辑表述为数组表达式(而不是带有if-elif-else分支的循环)。
  • 数据的分组运算(聚合、转换、函数应用等)。

NumPy之于数值计算特别重要的原因之一,是因为它可以高效处理大数组的数据。这是因为:

  • NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。 NumPy的C语言编写的算法库可以操作内存,而不必进行类型检查或其它前期 工作。比起Python的内置序列,NumPy数组使用的内存更少。
  • NumPy可以在整个数组上执行复杂的计算,而不需要Python的for循环。

基于NumPy的算法要比纯Python快10到100倍(甚至更快),并且使用的内存更少。

一、创建ndarray

创建数组最简单的办法就是使用array函数

嵌套序列:

可以用属性ndim和shape来查看一个数组的维度和形状:

使用dtype属性查看数据类型:

其他创建数组的方法:

二、ndarray的数据类型

dtype(数据类型)是一个特殊的对象,在使用array创建数组时我们可以通过dtype属性来设置数据类型:

数值型dtype的命名方式相同:一个类型名(如 float或int),后面跟一个用于表示各元素位长的数字。标准的双精度浮点值(即 Python中的float对象)需要占用8字节(即64位)。因此,该类型在NumPy中就记 作float64。表4-2列出了NumPy所支持的全部数据类型。

通过ndarray的astype方法明确地将一个数组从一个dtype转换成另一个dtype:

笔记:调用astype总会创建一个新的数组(一个数据的备份),即使新的dtype 与旧的dtype相同。

三、NumPy数组的运算

Numpy数组的矢量化(Vectorization):

  • 大小相等的数组之间的任何算术运算都会将运算应用到元素级.

  • 数组与标量的算术运算会将标量值传播到各个元素:

  • 大小相同的数组之间的比较会生成布尔值数组:

  • 不同大小的数组之间的运算叫做广播(broadcasting)

四、基本的索引和切片

当你将一个标量值赋值给一个切片时(如arr[5:8]=12),该值会自动传 播(也就说后面将会讲到的“广播”)到整个选区。

跟列表最重要的区别在于,数组 切片是原始数组的视图。这意味着数据不会被复制,视图上的任何修改都会直接反 映到源数组上。

由于NumPy的设计目的是处理大数据,所以你可以想 象一下,假如NumPy坚持要将数据复制来复制去的话会产生何等的性能和内存问题。

注意:如果你想要得到的是ndarray切片的一份副本而非视图,就需要明确地进行复制操作,例如 arr[5:8].copy() 。

在一个二维数组中,各索引位置上的元素不再 是标量而是一维数组:

可以传入一个以逗号隔开的索引列表来选取单个元素。也就是说,下面两种方式是等价的

图4-1说明了二维数组的索引方式。轴0作为行,轴1作为列。

在多维数组中,如果省略了后面的索引,则返回对象会是一个维度低一点的ndarray(它含有高一级维度上的所有数据)。

arr3d[0]是一个2×3数组:

这里注意,些选取数组子集都是数组的视图,所以当标量值和数组赋值给arr3d[0]这样一个数组索引子集时,原数组的数据也会发生变化。

五、切片索引

注意,“只有冒号”表示选取整个轴。

当行索引和列索引均时切片时,只能得到一个和原数组相同维度的数组视图。

通过将证书索引和切片索引混合,可以得到低纬度的切片。

 

六、布尔型索引

跟算术运算一样,数组的比较运算(如==)也是矢量化的。

布尔型数组可用于数组索引,此时布尔型数组的长度必须跟被索引的轴长度一致,此外,还可以将布尔型数组跟切片、整数(或整数序列,稍后将对此进行详细讲解)混合使用:

注意:如果布尔型数组的长度不对,布尔型选择就会出错,因此一定要小心。

下面的例子,我选取了 names == 'Bob' 的行,并索引了列:

要选择除"Bob"以外的其他值,既可以使用不等于符号(!=),也可以通过~对条件 进行否定:

在条件中我们还能使用&(和)、|(或)来进行逻辑条件的组合

注意:Python关键字and和or在布尔型数组中无效。要使用&与|。

通过布尔型索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的 数组也是如此。

通过布尔型数组设置值是一种经常用到的手段。例如,将data中的所有负值都设置为 0,我们只需:

通过一维布尔数组设置整行或列的值也很简单:

七、花式索引(索引列表)

花式索引(Fancy indexing)是一个NumPy术语,它指的是利用整数数组进行索 引。

无论数组是多少维的,花式索引总是 一维的。

记住,花式索引跟切片不一样,它总是将数据复制到新数组中。

假设我们有一个8×4数组:

一次传入多个索引数组会有一点特别。它返回的是一个一维数组,其中的元素对应 各个索引元组:

这个花式索引的行为可能会跟某些用户的预期不一样(包括我在内),选取矩阵的 行列子集应该是矩形区域的形式才对。下面是得到该结果的一个办法:

八、数组转置和轴对换

转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。

数组不仅有transpose方法,还有一个特殊的T属性都可以实现数组的转置。

对于高纬度数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置:

这里,第一个轴被换成了第二个,第二个轴被换成了第一个,最后一个轴不变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EMC三大法宝之一:屏蔽

结论:解决EMC的三大法宝为:屏蔽、接地和滤波。 Part 1 屏蔽的原理 首先,我们要了解屏蔽的概念。 屏蔽就是用金属对两个空间区域进行隔离, 用以控制一个空间区域的电场、 磁场和电磁波对另一个空间区域的影响,通常的…

【学习FreeRTOS】第17章——FreeRTOS任务通知

1.任务通知的简介 任务通知:用来通知任务的,任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行间接通信! 使用任务通知时&#xff0c…

深入理解linux内核--程序的执行

可执行文件 在第一章中我们把进程定义为“执行上下文”。这就意味着进行特定的计算需要收集必要的信息,包括所访问的页,打开的文件,硬件寄存器的内容等等。 可执行文件是一个普通文件,它描述了如何初始化一个新的执行上下文&…

《Linux从练气到飞升》No.17 进程创建

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

EdifierW200btfree耳机说明书

Edifier W200bt free 耳机说明书。

【MySQL系列】Select语句单表查询详解(二)ORDERBY排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

static关键字(实例成员方法可以访问静态变量,但是静态成员方法不能直接访问非静态变量或者非静态方法)

1、静态static关键字概述 static是静态的意思,可以修饰成员变量和成员方法。static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问、修改。静态成员变量(有static修饰,属于类,内存中加载一次&#xf…

vue3中引入百度地图

话不多说直接开干 1.第一种方式 百度地图地址 打开 https://lbsyun.baidu.com/index.php?title%E9%A6%96%E9%A1%B5 然后点进去地图 然后再这个功能里面选择一个地图,然后跳转页面 然后一直下滑 滑到底部 点击这个 跳转到这个页面 然后点击进入demo这个 然后到这个…

什么是Flex布局?请列举一些Flex布局的常用属性。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Flex布局(Flexible Box Layout)⭐ Flex布局的常用属性⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之…

Windows用户如何安装Cpolar

目录 概述 什么是cpolar? cpolar可以用在哪些场景? 1. 注册cpolar帐号 1.1 访问官网站点 2. 下载Windows版本cpolar客户端 2.1 下载并安装 2.2 安装完验证 3. token认证 3.1 将token值保存到默认的配置文件中 3.2 创建一个随机url隧道&#x…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【二】

文章目录 Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【二】项目介绍项目功能/界面项目操作界面 技术栈 实现功能02-创建项目基础界面需求分析/图解思路分析代码实现 Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【二】 项目…

c语言函数指针和指针函数的区别,以及回调函数的使用。

函数指针是什么,函数指针本质也是指针,不过是指向函数的指针,存储的是函数的地址。 指针函数是什么,指针函数其实就是返回值是指针的函数,本质是函数。 函数指针是如何定义的呢,如下 void (*pfun)(int a,int b) 这…

Could not resolve all artifacts for configuration ‘:classpath‘.

不与世俗为伍。哪怕这是自己许给自己的诅咒。 —— 宫崎骏 《红猪》 出现的问题 Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all artifacts for configuration ‘:classpath’. 解…

Qt 自定义菜单、右键菜单

在接触Qt这段时间以来,经常遇到菜单项的问题(右键菜单、托盘菜单、按钮菜单等),QMenu用于菜单栏,上下文菜单,弹出菜单等,利用QMenuQAction就可以达到效果! 右键菜单实现:通过重写contextMenuEv…

Three.js + Theatre.js WebGL动画制作简明教程

在这个教程中,我们将介绍 Theatre.js 的基础知识并探索如何制作令人惊叹的动画序列。 我们将演示如何为 Three.js 立方体制作动画、集成引人注目的视觉效果、修改颜色、试验 HTML 元素以及以特定时间间隔将动画与声音播放同步。 推荐:用 NSDT编辑器 快速…

CSS选择器讲解!!!

CSS选择器 一. 常用的CSS基本选择器1.标签(元素)选择器2.类选择器3.id选择器4.类选择器和标签选择器的区别5.通配符选择器 二.复合选择器(2种)1.交集选择器2.并集(群组)选择器 三.属性选择器四.关系选择器1.后代选择器2.子代选择器3.相邻兄弟选择器4.通用兄弟选择器 五.伪元素选…

SpringMVC探秘: 实现MVC模式的Web应用

文章目录 1. SpringMVC概述1.1. 什么是SpringMVC?1.1.1. MVC与SpringMVC 1.2. SpringMVC项目的优势 2. SpringMVC项目的创建与使用2.1. 创建SpringMVC项目2.2. 设置路由2.3. 获取参数2.3.1. 获取一个参数2.3.2. 获取多个参数2.3.3. 获取日期参数2.3.4. 参数重命名Re…

C++之fileno用法实例(一百八十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

智慧煤矿:煤矿井下视频监控汇聚/AI智能分析监管预警系统解决方案

一、背景分析 随着科技的不断进步,视频监控技术在各个领域得到了广泛应用,其中包括煤矿行业。智慧煤矿方案通过引入视频监控系统,可以实现对煤矿生产过程的实时监控和管理,提高矿山安全性和生产效率。为解决井下作业距离地面远&a…

Spring之Spring案例分析

Spring案例分析 Spring案例分析 摘要引言词汇解释详细介绍不同领域的案例分析实战项目示例注意事项总结 参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之…