0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Numpy详解-轴的概念

云深之无迹 来源:云深之无迹 作者:云深之无迹 2022-04-25 10:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

首先就是大肠包小肠,这就是轴的概念,除了这个还真的没有什么别的想法。

最近用numpy,越用这个东西越发现一些基础概念不明朗,这里简单的记录一下。

4570ff4a-c43e-11ec-bce3-dac502259ad0.png

先生成一个三维的数组

459697be-c43e-11ec-bce3-dac502259ad0.png

打印出来的样子

45ac831c-c43e-11ec-bce3-dac502259ad0.png

从内最小的开始看起,分别是元素,2,3,4

以小[]来界定

45c22b90-c43e-11ec-bce3-dac502259ad0.png

也就是说,首先是一个特别大的整体,一个数组,接着是里面4个小数组,每一个小数组里面有3个小数组,小数组内的单元是一个数对来构成的。

其实这就是轴的概念,只是因为是扁平化的,不直观。

axis=2

axis=1

axis=0

45d50058-c43e-11ec-bce3-dac502259ad0.png

按照顺序来填充

45e62216-c43e-11ec-bce3-dac502259ad0.png

按照数组0轴来相加

46038a0e-c43e-11ec-bce3-dac502259ad0.png

就是加的这个位置的元素

[[0+ 6+12+18=36 1+ 7+13+19=40] [2+ 8+14+20=44 3+ 9+15+21=48] [4+10+16+22=52 5+11+17+23=56]]

46187f68-c43e-11ec-bce3-dac502259ad0.png

再看一个

4633b71a-c43e-11ec-bce3-dac502259ad0.png

就是这样吧

[[ 0+ 1=1 2+ 3=5 4+ 5=9] [ 6+ 7=13 8+ 9=17 10+11=21] [12+13=25 14+15=29 16+17=33] [18+19=37 20+21=41 22+23=45]]

464b34c6-c43e-11ec-bce3-dac502259ad0.png

这个就没有什么好说的了吧

46609c08-c43e-11ec-bce3-dac502259ad0.png

其中第一轴是最大的称为0号,

其次开始从左到右依次的放置

NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是两个一维数组,其中第一个一维数组中每个元素又是一个一维数组。所以一维数组就是NumPy中的轴(axes),第一个轴相当于是底层数组,第二个轴是底层数组里的数组。而轴的数量——秩,就是数组的维数。

NumPy的数组中比较重要ndarray对象属性有:

1.ndarray.ndim:数组的维数(即数组轴的个数),等于秩。最常见的为二维数组(矩阵)。

2.ndarray.shape:数组的维度。为一个表示数组在每个维度上大小的整数元组。例如二维数组中,表示数组的“行数”和“列数”。ndarray.shape返回一个元组,这个元组的长度就是维度的数目,即ndim属性。

3.ndarray.size:数组元素的总个数,等于shape属性中元组元素的乘积。

4.ndarray.dtype:表示数组中元素类型的对象,可使用标准的Python类型创建或指定dtype。另外也可使用前一篇文章中介绍的NumPy提供的数据类型。

5.ndarray.itemsize:数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(float64占用64个bits,每个字节长度为8,所以64/8,占用8个字节),又如,一个元素类型为complex32的数组item属性为4(32/8)。

6.ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

其实进一步的,是阐述了一种方向的问题:在二维数组中axis=0是按列的,axis=1意味着按行。

468405b2-c43e-11ec-bce3-dac502259ad0.png

这个图太漂亮了

事实上,到这里的时候还是没有说明白主要的轴到底是怎么出来的,那继续。

46a74310-c43e-11ec-bce3-dac502259ad0.png

轴是行列的方向

如果是多维的数组,那axis=0就是向下的轴,axis=1是往右延的轴。

这些东西影响着你未来作用到上面的函数,该算哪些东西。而且进行计算的时候是会进行折叠,就是从这些指定的位置采用运算规律。

46c7cb9e-c43e-11ec-bce3-dac502259ad0.png

就是这样的,加到一起,2就变成了1

46ec82e0-c43e-11ec-bce3-dac502259ad0.png

axis=0的拼接方式

471597ac-c43e-11ec-bce3-dac502259ad0.png

axis=1,横向拼接

结论:将NumPy轴视为我们可以执行操作的方向。

接下来再补充一些,别的理解,尽量我们一篇文章解决这个问题。

473a0e3e-c43e-11ec-bce3-dac502259ad0.png

这个也是

47635046-c43e-11ec-bce3-dac502259ad0.png

这个图是让我喜欢的不行,它清楚的展示了这个数组轴的包含关系

47aa845c-c43e-11ec-bce3-dac502259ad0.png

数组之间的算数关系

47d62eea-c43e-11ec-bce3-dac502259ad0.png

运算紧凑,使用了非动态的特性

4800da00-c43e-11ec-bce3-dac502259ad0.png

使用Python的列表语法可以轻松的创建一个数组,要确保元素都一致

4821d642-c43e-11ec-bce3-dac502259ad0.png

由于数组的原因,没有了动态添加元素的特性,所以只能提前的把位置留好。

4844936c-c43e-11ec-bce3-dac502259ad0.png

再有了变量的情况先,可以使用like函数生成一个相似的数组

485dd584-c43e-11ec-bce3-dac502259ad0.png

提供了完整的生成函数

487e3cde-c43e-11ec-bce3-dac502259ad0.png

可以使用单调序列初始化数组

48a88908-c43e-11ec-bce3-dac502259ad0.png

arange对浮点不太友好

48d6e7bc-c43e-11ec-bce3-dac502259ad0.png

随机数组也可以生成,这个太常见了

生成完成了,下一个阶段就是取数了;

48fe13dc-c43e-11ec-bce3-dac502259ad0.png

就像这样,通过索引来切割

49273e24-c43e-11ec-bce3-dac502259ad0.png

布尔和掩码真的是太好用了!!!!

495cfba4-c43e-11ec-bce3-dac502259ad0.png

还有专有的函数,大规模的进行取数操作

49821844-c43e-11ec-bce3-dac502259ad0.png

向量化操作无疑是最引人注目的东西

49a6f7e0-c43e-11ec-bce3-dac502259ad0.png

浮点也OJBK

49c47ee6-c43e-11ec-bce3-dac502259ad0.png

常见函数不在话下,矢量化的意义在于可以同时操作海量数据,具有天然的并行化。

49e4f77a-c43e-11ec-bce3-dac502259ad0.png

这是内积和叉积

4a04794c-c43e-11ec-bce3-dac502259ad0.png

三角函数不能少

4a255c34-c43e-11ec-bce3-dac502259ad0.png

四舍五入的操作也有

4a487386-c43e-11ec-bce3-dac502259ad0.png

关于统计的功能也有

4a709ef6-c43e-11ec-bce3-dac502259ad0.png

矩阵的初始化,注意参数的位置,先行,后列

4a98bd14-c43e-11ec-bce3-dac502259ad0.png

随机矩阵也是经常要用的

4ac9542e-c43e-11ec-bce3-dac502259ad0.png

索引语法要好好的看,注意是从0开始,记得+1

4af8cc18-c43e-11ec-bce3-dac502259ad0.png

上面放过这个图,但是为了完整性,这里再放一次

4b182e50-c43e-11ec-bce3-dac502259ad0.png

@计算矩阵的乘积

4b3bc6e4-c43e-11ec-bce3-dac502259ad0.png

广播机制,这个怎么说呢。就是运算我们一般是规模相同的进行计算,不相同的时候需要变的相同。其实就是一套规则。

4b5077e2-c43e-11ec-bce3-dac502259ad0.png

先简单点,规模一样

4b61c092-c43e-11ec-bce3-dac502259ad0.png

这个就不一样了

4b7efc02-c43e-11ec-bce3-dac502259ad0.png

这就是广播,先是维数的调整,两个维数一致,接着调整内部的参数

4b3bc6e4-c43e-11ec-bce3-dac502259ad0.png

你看这个,9x9与后面这样的东西运算,不就是要使用广播吗?

4bb68668-c43e-11ec-bce3-dac502259ad0.png

转置

4bd88bdc-c43e-11ec-bce3-dac502259ad0.png

数组重构

4bff1cd4-c43e-11ec-bce3-dac502259ad0.png

互相之间的转换图,这个要记住

4c2210fe-c43e-11ec-bce3-dac502259ad0.png

拼接操作,我也写过

4c53fcae-c43e-11ec-bce3-dac502259ad0.png

也是拼接

4c754580-c43e-11ec-bce3-dac502259ad0.png

拆分

4c9c3bf4-c43e-11ec-bce3-dac502259ad0.png

tile复杂黏贴,repeat是分页打印

4cc10b00-c43e-11ec-bce3-dac502259ad0.png

这个是可以删除对应的行列,这不就是白给

4ce517f2-c43e-11ec-bce3-dac502259ad0.png

插入操作

4d0b7f0a-c43e-11ec-bce3-dac502259ad0.png

边界添加常数,就好像镶边一样

下面的内容有趣:

4d2dad96-c43e-11ec-bce3-dac502259ad0.png

创建这样的东西,C和Python的做法是这样的

4d588fe8-c43e-11ec-bce3-dac502259ad0.png

matlab这样做,相对于先生成两个行向量,接着开始广播,运算

4d7770e8-c43e-11ec-bce3-dac502259ad0.png

这个地方是numpy的做法,效率更高。上面是生成网格的算法

4d94ba86-c43e-11ec-bce3-dac502259ad0.png

numpy的排序算法有点问题,这里就不讨论了,因为我也没有搞明白

4db7681a-c43e-11ec-bce3-dac502259ad0.png

返回索引,其实就是坐标,有时位置是很重要的

4de5c354-c43e-11ec-bce3-dac502259ad0.png

all和any就是有没有的问题

4e0d2f16-c43e-11ec-bce3-dac502259ad0.png

三维的接下来会说

4e4af350-c43e-11ec-bce3-dac502259ad0.png

至于形状怎么样,会看你的约定。

接下来再加点东西,也不知道有没有人能看到这里。

4e7e47aa-c43e-11ec-bce3-dac502259ad0.png

上面频繁的说了拼接的事情,这里带你看看有什么参数

4e9bb06a-c43e-11ec-bce3-dac502259ad0.jpg

这个图没什么用,我就是觉得好看

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 元素
    +关注

    关注

    0

    文章

    47

    浏览量

    8722
  • 数据类型
    +关注

    关注

    0

    文章

    237

    浏览量

    14108
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27114

原文标题:Numpy详解-轴的概念

文章出处:【微信号:TT1827652464,微信公众号:云深之无迹】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    无人机是如何工作的?

    飞行器、无人机——无论怎么称呼它们,这些小玩意儿都既迷人又好玩!对于喜欢DIY的人来说,组装一架四飞行器绝对是一个很棒的项目。但四飞行器究竟是如何工作的呢?它是如何飞行的?需要组装哪些部件
    的头像 发表于 11-14 10:28 266次阅读
    四<b class='flag-5'>轴</b>无人机是如何工作的?

    Hudi系列:Hudi核心概念之索引(Indexs)

    Hudi系列:Hudi核心概念(版本1.0) •Hudi架构 ◦一. 时间(TimeLine)s ▪1.1 时间(TimeLine)概念 ▪1.2 Hudi的时间线由组成 ▪1.3
    的头像 发表于 10-21 09:47 194次阅读
    Hudi系列:Hudi核心<b class='flag-5'>概念</b>之索引(Indexs)

    Hudi系列:Hudi核心概念之文件布局(Storage Layouts)

    Hudi系列:Hudi核心概念(版本1.0) •Hudi架构 ◦一. 时间(TimeLine) ▪1.1 时间(TimeLine)概念 ▪1.2 Hudi的时间线由组成 ▪1.3
    的头像 发表于 10-14 16:06 320次阅读
    Hudi系列:Hudi核心<b class='flag-5'>概念</b>之文件布局(Storage Layouts)

    边聊安全 | 以L3级自动驾驶为例,详解DDT、DDT Fallback、MRC、MRM概念

    以L3级自动驾驶为例,详解DDT、DDTFallback、MRC、MRM概念写在前面:在自动驾驶技术迅猛发展的今天,动态驾驶任务(DDT)及其后备(DDTfallback)成为理解自动驾驶系统运作
    的头像 发表于 09-05 16:20 2806次阅读
    边聊安全 | 以L3级自动驾驶为例,<b class='flag-5'>详解</b>DDT、DDT Fallback、MRC、MRM<b class='flag-5'>概念</b>

    GraniStudio:获取信息例程

    1.文件运行 导入工程 双击运行桌面 GraniStudio .exe。 通过引导界面导入获取信息运动例程,点击导入按钮。 打开获取信息例程所在路径,选中获取信息.gsp文件,点击打开,完成
    的头像 发表于 08-22 16:40 500次阅读
    GraniStudio:获取<b class='flag-5'>轴</b>信息例程

    GraniStudio:控制设置例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入控制设置例程,点击导入按钮。 打开控制设置例程所在路径,选中控制设置.gsp文件,点击打开,完成导入
    的头像 发表于 08-22 16:35 282次阅读
    GraniStudio:控制<b class='flag-5'>轴</b>设置例程

    GraniStudio:复位例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入复位例程,点击导入按钮。 打开复位运动例程所在路径,选中轴复位运动.gsp文件,点击打开,完成导入。 2.
    的头像 发表于 08-22 16:05 478次阅读
    GraniStudio:<b class='flag-5'>轴</b>复位例程

    yolov11转kmodel,numpy是要降级为1.x吗?

    python3.9,yolo是最新的稳定版,和yolo捆绑pip安装的numpy是2.0.1 错误日志
    发表于 08-11 08:16

    GraniStudio零代码平台复位算子支持多少个同时复位,有哪些回零模式?

    GraniStudio平台在复位的功能上未对同时复位的数进行硬性限制,理论上支持任意数量同步复位,需要考虑的是在做多同步复位时要评估机械安全风险,建议提前确认机械在多
    的头像 发表于 07-07 18:02 484次阅读
    GraniStudio零代码平台<b class='flag-5'>轴</b>复位算子支持多少个<b class='flag-5'>轴</b>同时复位,有哪些回零模式?

    鸿蒙应用px,vp,fp概念详解

    【HarmonyOS 5】鸿蒙应用px,vp,fp概念详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财# 一、前言 目前的鸿蒙开发者,大多数是从前端或者
    的头像 发表于 07-07 11:48 1001次阅读
    鸿蒙应用px,vp,fp<b class='flag-5'>概念</b><b class='flag-5'>详解</b>

    【HarmonyOS 5】鸿蒙中的UIAbility详解(三)

    详解系列的最终章。主要针对UIAbility的冷启动和热启动,对于want数据的处理。UIAbility的备份恢复,UIAbility的接续等高级功能的概念和使用讲解。 二、UIAbility启动模式
    的头像 发表于 06-14 22:32 482次阅读

    电机为什么会产生电流?

    电机是现代工业中不可或缺的动力设备,广泛应用于各种机械系统中。然而,在电机的运行过程中,有时会出现一种被称为“电流”的现象,这种现象不仅会影响电机的正常运行,还可能导致设备的损坏。那么,电机
    的头像 发表于 06-07 16:14 901次阅读
    电机为什么会产生<b class='flag-5'>轴</b>电流?

    使用micropython的ulab.numpy切片将RGB888的NHWC格式转换为RGBP888的NCHW格式,速度非常慢怎么解决?

    转换代码如下.每次转换需要花费200ms以上. rgb888_img_np = rgb888_img.to_numpy_ref()rgb888p_img_np = np.zeros((3
    发表于 02-08 07:25

    Chart FX——坐标简介

    坐标是最重要的元素之一,因为读者需要借由其所包含的信息来理解图表。在大多数情况下,图表是以 XY 坐标系绘制的。数值或 Y 显示数值数据所代表的数值范围,而类别或 X 则显示图
    的头像 发表于 01-07 11:05 1188次阅读
    Chart FX——坐标<b class='flag-5'>轴</b>简介

    模组和多模组的区别

    在工业自动化领域,单与多机器人占据了市场的主导地位.
    的头像 发表于 12-31 17:45 877次阅读
    单<b class='flag-5'>轴</b>模组和多<b class='flag-5'>轴</b>模组的区别