请选择 进入手机版 | 继续访问电脑版
楼主: jpld
11741 1

[原创博文] 【NumPy学习指南】day4 多维数组的切片和索引 [推广有奖]

  • 2关注
  • 50粉丝

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
1268 个
通用积分
2.1233
学术水平
120 点
热心指数
120 点
信用等级
99 点
经验
1249 点
帖子
192
精华
0
在线时间
271 小时
注册时间
2009-5-29
最后登录
2022-3-1

jpld 发表于 2015-11-16 21:37:17 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

ndarray支持在多维数组上的切片操作。为了方便起见,我们可以用一个省略号(...)来

表示遍历剩下的维度。

(1)举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组:

>>>b=np.arange(24).reshape(2,3,4)

>>> b.shape

(2L, 3L, 4L)

>>> b

array([[[ 0,  1, 2,  3],

        [ 4, 5,  6,  7],

        [ 8, 9, 10, 11]],

       [[12, 13, 14, 15],

        [16, 17, 18, 19],

        [20, 21, 22, 23]]])

多维数组b中有0~23的整数,共24个元素,是一个2×3×4的三维数组。我们可以形象地把它看做一个两层楼建筑,每层楼有12个房间,并排列成3行4列。或者,我们也可以将其看成是电子表格中工作表(sheet)、行和列的关系。你可能已经猜到,reshape函数的作用是改变数组的“形状”,也就是改变数组的维度,其参数为一个正整数元组,分别指定数组在每个维度上的大小。如果指定的维度和数组的元素数目不相吻合,函数将抛出异常。

(2)我们可以用三维坐标来选定任意一个房间,即楼层、行号和列号。例如,选定第1层楼、第1行、第1列的房间(也可以说是第0层楼、第0行、第0列,这只是习惯问题),可以这样表示:

>>>b[0,0,0]

0

(3)如果我们不关心楼层,也就是说要选取所有楼层的第1行、第1列的房间,那么可以将第1个下标用英文标点的冒号:来代替:

>>>b[:,0,0]

array([0, 12])

>>>b[0]

array([[0,  1, 2,  3],

       [ 4, 5,  6,  7],

       [ 8, 9, 10, 11]])

我们还可以这样写,选取第1层楼的所有房间:

>>>b[0,:,:]

array([[0,  1, 2,  3],

       [ 4, 5,  6,  7],

       [ 8, 9, 10, 11]])

多个冒号可以用一个省略号(...)来代替,因此上面的代码等价于:

>>>b[0,...]

array([[0,  1, 2,  3],

       [ 4, 5,  6,  7],

       [ 8, 9, 10, 11]])

进而可以选取第1层楼、第2排的所有房间:

>>>b[0,1]

array([4,5, 6, 7])

(4) 再进一步,我们可以在上面的数组切片中间隔地选定元素:

>>>b[0,1,::2]

array([4,6])

(5) 如果要选取所有楼层的位于第2列的房间,即不指定楼层和行号,用如下代码即可:

>>>b[...,1]

array([[1,  5, 9],

       [13, 17, 21]])

类似地,我们可以选取所有位于第2行的房间,而不指定楼层和列号:

>>>b[:,1]

array([[4,  5, 6,  7],

       [16, 17, 18, 19]])

如果要选取第1层楼的所有位于第2列的房间,在对应的两个维度上指定即可:

>>>b[0,:,1]

array([1,5, 9])

(6)如果要选取第1层楼的最后一列的所有房间,使用如下代码:

>>>b[0,:,-1]

array([3,  7, 11])

如果要反向选取第1层楼的最后一列的所有房间,使用如下代码:

>>>b[0,::-1,-1]

array([11,  7,  3])

在该数组切片中间隔地选定元素:

>>>b[0,::2,-1]

array([3, 11])

如果在多维数组中执行翻转一维数组的命令,将在最前面的维度上翻转元素的顺序,在我们

的例子中将把第1层楼和第2层楼的房间交换:

>>>b[::-1]

array([[[12,13, 14, 15],

        [16, 17, 18, 19],

        [20, 21, 22, 23]],

       [[ 0, 1,  2,  3],

        [ 4, 5,  6,  7],

        [ 8, 9, 10, 11]]])

刚才做了些什么

我们用各种方法对一个NumPy多维数组进行了切片操作。




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Numpy 学习指南 习指南 NUM Day 建筑 元素

modest2016 发表于 2019-1-15 22:08:22 |显示全部楼层 |坛友微信交流群
求《numpy学习指南》数据下载

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-28 16:09