前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Numpy详解-轴的概念

Numpy详解-轴的概念

作者头像
云深无际
发布2022-04-25 20:23:46
8960
发布2022-04-25 20:23:46
举报
文章被收录于专栏:云深之无迹云深之无迹

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

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

先生成一个三维的数组

打印出来的样子

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

以小[]来界定

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

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

axis=2

axis =1

axis=0

按照顺序来填充

按照数组0轴来相加

就是加的这个位置的元素

代码语言:javascript
复制
[[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]]

再看一个

就是这样吧

代码语言:javascript
复制
[[ 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]]

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

其中第一轴是最大的称为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意味着按行。

这个图太漂亮了

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

轴是行列的方向

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

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

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

axis=0的拼接方式

axis=1,横向拼接

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

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

这个也是

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

数组之间的算数关系

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

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

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

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

提供了完整的生成函数

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

arange对浮点不太友好

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

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

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

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

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

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

浮点也OJBK

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

这是内积和叉积

三角函数不能少

四舍五入的操作也有

关于统计的功能也有

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

随机矩阵也是经常要用的

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

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

@计算矩阵的乘积

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

先简单点,规模一样

这个就不一样了

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

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

转置

数组重构

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

拼接操作,我也写过

也是拼接

拆分

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

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

插入操作

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

下面的内容有趣:

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

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

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

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

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

all和any就是有没有的问题

三维的接下来会说

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档