注:最近在看代码,有好多关于numpy库的函数,尤其对于numpy数组,什么[:,2]、[-1:,0:2]、[1:,-1:]搞得一脸懵逼,百度没找到解释得很到位的,官网教程也也真是够简洁的。所以,还是得自己去实打实的敲一下,加强理解。

numpy数组切片操作

通过冒号分隔切片参数 start:stop:step 来进行切片操作:
形如:

b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2

冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

一维数组

一维数组就如上所说,直接给例子看

>>>import numpy as np
>>>a = np.array([1,2,3,4,5,6,7,8])

1.只有一个参数

>>> a[1] #具体的元素 2
2
>>> a[1:] #冒号前面是起,后面是止,冒号前面空,指最小0,后面放空就是到最后,这里是一维数组
array([2, 3, 4, 5, 6, 7, 8])

对比一下下面这两个,一个是一维数组,一个是具体的单个元素,为什么呢?看后面解释。

>>> a[7:]
array([8])
>>> a[7]
8

2.两个参数

>>> print(a[1:3])  #从索引1开始,也就是第二个元素2,到索引3,不包括索引3
[2 3]

3.三个参数

>>> print(a[1:7:2]) #从索引1开始,到索引7,不包括索引7,间隔为2
[2 4 6]

一维数组,很好理解,毕竟中括号[]里只有冒号,没有逗号

二维数组

先定义一个二维数组

>>> import numpy as np
>>> a = np.array([[1,2,3],[3,4,5],[4,5,6]])
>>>print(a)
[[1 2 3][3 4 5][4 5 6]]
简单:
>>> a[1]
array([3, 4, 5])

单个参数的话,就是指的是1,第二行或第二列。这里是行,因为行优先我猜。
所以就是第2行的元素

>>> a[1:]
array([[3, 4, 5],[4, 5, 6]])

出现了冒号,意思是从第二号到最后,这里指的也是行。冒号后面没有数就是指最大的。冒号前面没有数,就是指最小数0。如下

>>> a[:2]
array([[1, 2, 3],[3, 4, 5]])

这里的意思就是,从0开始,到2,也就是第1行第二行。(第三行不算)

>>> a[1:2]
array([[3, 4, 5]])

现在是两个参数了,不过只有一个冒号,跟一维数组一样,是从第二行到第三行,不包括第三行。

进阶
>>> a[1,]
array([3, 4, 5])
>>> a[1:,]
array([[3, 4, 5],[4, 5, 6]])
>>> a[:2,]
array([[1, 2, 3],[3, 4, 5]])
>>> a[1:2,]
array([[3, 4, 5]])

跟上面三个对比一下,发现输出一模一样。

总结:

这是numpy的切片操作,一般结构如num[a:b,c:d],分析时以逗号为分隔符
逗号之前为要取的num行的下标范围(a到b-1),逗号之后为要取的num列的下标范围(c到d-1);
前面是行索引,后面是列索引
如果是这种num[:b,c:d],a的值未指定,那么a为最小值0;
如果是这种num[a:,c:d],b的值未指定,那么b为最大值;c、d的情况同理可得。

所以重点就是看逗号,没逗号,就是看行了,冒号呢,就看成一维数组的形式啦。那上面逗号后面没有树,也就是不对列操作咯。
当然也可以这样:

>>> a[:2:1]
array([[1, 2, 3],[3, 4, 5]])

首先没有逗号,那切片就是只看行了,这里的意思是,从0开始到2(2不算),间隔为1。

进阶up

首先先把原数组再看一下。

>>> import numpy as np
>>> a = np.array([[1,2,3],[3,4,5],[4,5,6]])
>>>print(a)
[[1 2 3]
[3 4 5]
[4 5 6]]
>>> a[:,1]
array([2, 4, 5])

逗号前面是行,行都没有指定数,也就是说对行每要求,只考虑列了。
这里的意思是:逗号之后是列,只有一个元素1,就是取第2列了。

>>> a[:,1:3]  #第2列到第3列
array([[2, 3],[4, 5],[5, 6]])
>>> a[:,0:2] #第1列到第2列
array([[1, 2],[3, 4],[4, 5]])
>>> a[:,]  #对列也不操作,跟下面等价
array([[1, 2, 3],[3, 4, 5],[4, 5, 6]])
>>> a[:,:]
array([[1, 2, 3],[3, 4, 5],[4, 5, 6]])

但是,下面的写法是错的!!! (就是逗号在最前面都是错的)

>>> a[,1]File "<stdin>", line 1a[,1]^
SyntaxError: invalid syntax
>>> a[,]File "<stdin>", line 1a[,]^
SyntaxError: invalid syntax
>>> a[,:1]File "<stdin>", line 1a[,1]^
SyntaxError: invalid syntax

到这,应该能基本看得懂所有的切片操作了吧!!!
但是,我们可能还会遇到负号,比如-1、-2…等这些。这些怎么理解呢
看下图

也就是说,-1就是指最后一个(行/列),依次递推。

实战一波
>>> a[:,-1]  #就是最后一列啦
array([3, 5, 6])
>>> a[:,-3:]  #倒3列,也就是这个数组的第一列,一直到最后。
array([[1, 2, 3],[3, 4, 5],[4, 5, 6]])
>>> a[:,-3:-1]  #倒3列,到倒1列,不包括倒一列。
array([[1, 2],[3, 4],[4, 5]])

其他行和列就都差不多啦

ok,现在看看稍微难理解的。

进阶upup

对比一下下面两个,发现他们的维度不同,一个是一维的,一个是二维的。
我们上面也遇到一个,一个是一维,一个是具体的单个元素。

>>> a[:,-1]
array([3, 5, 6])
>>> a[:,-1:]
array([[3],[5],[6]])

我的理解:

第一个是,指定了最后一列,也就是说,在二维数组里的一列,就是一维的啊。那么第二个,是从最后一列开始,不妨假设一下后面还有列,那么就应该是不止一列,对机器来说,就是二维的。机器肯定不知道什么时候是一维,什么时候是二维的,所以当你用到start和stop的时候,那就当作是二维的了。

我的建议:

官网给出的教程实在是太简洁了。不够详细,所以啊,还是要自己动动手,就能很快明白numpy数组的切片操作了。

注;以上就是博主能想到的所以切片操作了吧,关于我的理解,如果有误的话,还请大佬指出,共同学习呀。


更新2021.10.13

有大半年没有更新博客了,这段时间一直准备春招,实习,秋招,到今天基本上可以结束坐等开奖了;
目前手里有近10个CV算法工程师意向书:字节,商汤,百度,顺丰,华为,小红书,拼多多,小马智行,海康威视,腾讯等。
接下来会花很多时间在小红书上整理这一过程所有的经验以及技巧,包括:丰富简历内容,如何打比赛(大佬止步),如何刷题,刷什么题,刷到什么程度,面试技巧,面经整理,hr面技巧,如何反问面试官,如何argue薪资等等等,大家有需要可以关注一波哈,内容保证丰富!助力大家秋招收割offer到手软!

大家如果是刚研一或者已经研二或者是大二或者大三赶紧关注一波,关注我秋招不踩坑!

小红书号:371845174(Activewaste,博客同名)

后面也会在小红书分享好用工具,插件,装逼神器等,手把手教学,大家关注起来哈!
我看有粉丝评论私信求更新的,大受鼓舞哈哈哈哈,后面会继续更新论文笔记,供大家参考互相学习!!!
另外我比较少上csdn,大家给我私信要联系方式或者评论问问题有时没看到(一个月没上,200+的通知),大家直接去小红书私信提问,或者催我撒!

numpy数组切片操作之[:,2]、[-1:,0:2]、[1:,-1:]等都是啥?相关推荐

  1. numpy数组切片:一维/二维/数组

    文章目录 numpy数组切片操作 一维数组(冒号:) 1.一个参数:a[i] 2.两个参数:b=a[i:j] 3.三个参数:格式b = a[i:j:s] 4.例子 二维数组(逗号,) 取元素 X[n0 ...

  2. python numpy数组切片_python中numpy数组切片实验解释

    print(a[0::2]).a[::2].[:,2].[1:,-1:].a[::-1].[ : n].[m : ].[-1].[:-1].[1:]等的含义 文章目录 一维数组(冒号:) 1.一个参数 ...

  3. numpy基础——对数组切片操作

    创建 首先创建一个多维数组: a = numpy.arange(24).reshape((2,3,4)) print(a) 结果是: [[[ 0  1  2  3]   [ 4  5  6  7]   ...

  4. Numpy 数组切片

    一.列表切片(一维数组) 1.1.切片原理 列表切片是从原始列表中提取列表的一部分的过程.在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表.Python中符合序列的有序 ...

  5. python数组切片效率_python – 对numpy数组切片进行采样的最快方法是什么?

    我有一个3D(时间,X,Y)numpy数组,包含6个小时的时间序列几年. (比如5).我想创建一个采样时间序列,其中包含从可用记录中随机抽取的每个日历日的1个实例(每天5种可能性),如下所示. > ...

  6. Numpy的切片操作

    Numpy数组的切片基本操作 以冒号为分隔符通过参数 start:stop:step 来进行切片操作, start省略则默认从头开始索引 stop省略则默认索引到结尾 step省略则默认步长为1 如下 ...

  7. python numpy 数组中元素设置所有小于0的元素为0

    >>> import numpy as np >>> a = np.random.randint(-5, 5, (5, 5)) >>> a arr ...

  8. numpy库中ndarray切片操作的参数意义

    ndarray切片操作的规则总结出来叫做"三帽号规则" 三帽号规则即:[开始索引:结尾索引:步长],并且切片区间是左闭右开的,即"开始索引:结尾索引"表示的区间 ...

  9. python numpy数组含逗号的切片

    普通切片操作: list名[首:尾:步长] numpy数组切片操作: 数组名[首:尾,首:尾:步长](逗号用于区分维度,注意:逗号前面不能限定步长) example 1: import numpy a ...

  10. Numpy学习笔记三——数组切片、bool索引、掩码和花哨索引

    Numpy数组切片.bool索引.掩码和花哨索引 数组切片(slice) 数组切片的公式为 my_array[start: end: step, start: end: step] #示例1: imp ...

最新文章

  1. 【OpenCV 4开发详解】深度神经网络应用实例
  2. 一个ant的简单实例
  3. c++ 公有继承的赋值兼容规则
  4. JAVA-循环体小练习——ATM取款机
  5. [html] 对于rtl网站的适配有哪些方案?
  6. CSS3 响应式布局之弹性网格
  7. Python机器学习:逻辑回归算法以及多类分类
  8. 常用C/C++预处理指令详解
  9. 手机号码归属地 mysql_最新全国手机号码归属地信息SQLite数据库2019年2月更新
  10. redis 过期删除策略和淘汰策略 -redis设计与实现笔记
  11. 使用yarn创建react项目报node_modules\core-js-pure: Command failed错误
  12. 基于python的电影推荐系统
  13. 医院网络安全管理方案
  14. Android 多语言对照表
  15. 刷题笔记——青蛙跳台阶问题汇总
  16. Tools - On Duty
  17. java 超时状态_Java任务超时处理机制实现【原创】
  18. Java 二十三种设计模式
  19. 万柳少爷背后,大批有钱人正在自媒体上发着横财。
  20. 知否:高增长时代已过,汽车互联网玩家如何开拓更多增量?

热门文章

  1. 波束形成算法学习笔记之二(固定波束形成)
  2. Centos7之Hadoop完全分布式集群搭建和配置
  3. 2022年全球与中国一次性内窥镜市场现状及未来发展趋势
  4. MATLAB之模型仿真(一)简单自由落体运动
  5. Android安装软件的后缀,apk是什么文件,后缀是apk是什么文件
  6. IT公民:293个公司人压力和心理调查
  7. MyBatis配置文件
  8. copy uncode Cstring
  9. OceanBase数据库Docker部署文档
  10. 宿舍校园网路由器配置原理及指南