详解Python二维数组与三维数组切片的方法


Posted in Python onJuly 18, 2019

如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度;

如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间隔的前、中和后分别表示对象的第0、1、2个维度。

x[n,:]、x[:,n]、x[m:n,:]、x[:,m:n]

上面的中括号中(m:n)应当看成一个整体,除了(m:n)之外的冒号就是用来表明在哪个维度上操作的。

对于二维数组,在冒号前面的(n,)意味着对二维数组的第0个维度上的第n号元素操作,在冒号后面的(,n)意味着对二维数组的第1个维度上的第n号元素进行操作。如果n替换成(m:n)则表示对第m号到第n-1号元素操作。

举例:

import numpy as np

a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]])
print(a.shape)
print(a[0, :], a[0, :].shape)
print(a[1, :], a[1, :].shape)
print(a[-1, :], a[-1, :].shape)
print(a[0:2, :], a[0:2, :].shape)
print(a[:, 0], a[:, 0].shape)
print(a[:, 1], a[:, 1].shape)
print(a[:, -1], a[:, -1].shape)
print(a[:, 0:2], a[:, 0:2].shape)

 运行结果如下:

(5, 4)
[1 2 3 4] (4,)
[5 6 7 8] (4,)
[17 18 19 20] (4,)
[[1 2 3 4]
 [5 6 7 8]] (2, 4)
[ 1 5 9 13 17] (5,)
[ 2 6 10 14 18] (5,)
[ 4 8 12 16 20] (5,)
[[ 1 2]
 [ 5 6]
 [ 9 10]
 [13 14]
 [17 18]] (5, 2)

Process finished with exit code 0

上例中,a是shape=(5,4)的数组。第0个维度上有5个元素,第1个维度上有4个元素(元素不一定是单个值, 也可能是数组,这里的元素的叫法是相对于某个维度而言的)。

  • a[0, :]、a[1, :]、a[-1, :]分别提取了a的第0个维度上的第0、1和-1个元素,每个元素都是一个含有4个元素的数组。
  • a[0:2, :]提取了a的第0个维度上的第0和1两个元素,两个元素都是一个含有4个元素的数组,共同组成一个二维数组。
  • a[:, 0]、a[:, 1]、a[:, -1]分别提取了a的第1个维度上的0、1和-1个元素,每个元素都是单个元素值。
  • a[:, 0:2]提取了a的第1个维度上的第0和1两个元素,两个元素都是单个元素值,共同组成一个二维数组。

x[n,::]、x[:,n:]、x[::,n]、x[:,:,n]、x[m:n,::]、x[:,m:n:]、x[::,m:n]、x[:,:,m:n]

上面的中括号中(m:n)应当看成一个整体,除了(m:n)之外的两个冒号就是用来表明在哪个维度上操作的。

对于三维数组,在双冒号的最前面的(n,)意味着对三维数组的第0个维度上的第n号元素操作,在双冒号的中间的(,n)意味着对三维数组的第1个维度上的第n号元素进行操作,在双冒号的后面的(,n)意味着对三维数组的第2个维度上的第n号元素进行操作。如果n替换成(m:n)则表示对第m号到第n-1号元素操作。

举例:

import numpy as np

b = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
       [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]],
       [[25, 26, 27, 28], [29, 30, 31, 32], [33, 34, 35, 36]],
       ])

print(b.shape)
print("b[0, ::],b[1, ::],b[-1, ::],b[0:2, ::]")
print(b[0, ::], b[0, ::].shape)
print(b[1, ::], b[1, ::].shape)
print(b[-1, ::], b[-1, ::].shape)
print(b[0:2, ::], b[0:2, ::].shape)
print("b[:, 0:],b[:, 1:],b[:, -1:],b[:, 0:2:]")
print(b[:, 0:], b[:, 0:].shape)
print(b[:, 1:], b[:, 1:].shape)
print(b[:, -1:], b[:, -1:].shape)
print(b[:, 0:2:], b[:, 0:2:].shape)
print("b[::, 0],b[::, 1],b[::, -1],b[::, 0:2:]")
print(b[::, 0], b[::, 0].shape)
print(b[::, 1], b[::, 1].shape)
print(b[::, -1], b[::, -1].shape)
print(b[::, 0:2:], b[::, 0:2].shape)
print("b[:,:, 0],b[:,:, 1],b[:,:, -1],b[:,:, 0:2:]")
print(b[:, :, 0], b[:, :, 0].shape)
print(b[:, :, 1], b[:, :, 1].shape)
print(b[:, :, -1], b[:, :, -1].shape)
print(b[:, :, 0:2:], b[:, :, 0:2].shape)

运行结果如下:

(3, 3, 4)
b[0, ::],b[1, ::],b[-1, ::],b[0:2, ::]
[[ 1 2 3 4]
 [ 5 6 7 8]
 [ 9 10 11 12]] (3, 4)
[[13 14 15 16]
 [17 18 19 20]
 [21 22 23 24]] (3, 4)
[[25 26 27 28]
 [29 30 31 32]
 [33 34 35 36]] (3, 4)
[[[ 1 2 3 4]
 [ 5 6 7 8]
 [ 9 10 11 12]]

 [[13 14 15 16]
 [17 18 19 20]
 [21 22 23 24]]] (2, 3, 4)
b[:, 0:],b[:, 1:],b[:, -1:],b[:, 0:2:]
[[[ 1 2 3 4]
 [ 5 6 7 8]
 [ 9 10 11 12]]

 [[13 14 15 16]
 [17 18 19 20]
 [21 22 23 24]]

 [[25 26 27 28]
 [29 30 31 32]
 [33 34 35 36]]] (3, 3, 4)
[[[ 5 6 7 8]
 [ 9 10 11 12]]

 [[17 18 19 20]
 [21 22 23 24]]

 [[29 30 31 32]
 [33 34 35 36]]] (3, 2, 4)
[[[ 9 10 11 12]]

 [[21 22 23 24]]

 [[33 34 35 36]]] (3, 1, 4)
[[[ 1 2 3 4]
 [ 5 6 7 8]]

 [[13 14 15 16]
 [17 18 19 20]]

 [[25 26 27 28]
 [29 30 31 32]]] (3, 2, 4)
b[::, 0],b[::, 1],b[::, -1],b[::, 0:2:]
[[ 1 2 3 4]
 [13 14 15 16]
 [25 26 27 28]] (3, 4)
[[ 5 6 7 8]
 [17 18 19 20]
 [29 30 31 32]] (3, 4)
[[ 9 10 11 12]
 [21 22 23 24]
 [33 34 35 36]] (3, 4)
[[[ 1 2 3 4]
 [ 5 6 7 8]]

 [[13 14 15 16]
 [17 18 19 20]]

 [[25 26 27 28]
 [29 30 31 32]]] (3, 2, 4)
b[:,:, 0],b[:,:, 1],b[:,:, -1],b[:,:, 0:2:]
[[ 1 5 9]
 [13 17 21]
 [25 29 33]] (3, 3)
[[ 2 6 10]
 [14 18 22]
 [26 30 34]] (3, 3)
[[ 4 8 12]
 [16 20 24]
 [28 32 36]] (3, 3)
[[[ 1 2]
 [ 5 6]
 [ 9 10]]

 [[13 14]
 [17 18]
 [21 22]]

 [[25 26]
 [29 30]
 [33 34]]] (3, 3, 2)

Process finished with exit code 0

上例中,b是shape=(3,3,4)的数组。第0个维度上有3个元素,第1个维度上有3个元素,第2个维度上有4个元素(元素不一定是单个值, 也可能是数组,这里的元素的叫法是相对于某个维度而言的)。

  • b[0, ::]、b[1, ::]、b[-1, ::]分别提取了b的第0个维度上的第0、1和-1个元素,每个元素都是一个二维数组。
  • b[0:2, ::]提取了b的第0个维度上的第0和1两个元素,两个元素都是一个二维数组,共同组成一个三维数组。
  • b[:, 0:]、b[:, 1:]、b[:, -1:]分别提取了b的全部元素(都是由4个元素的单个数组)、b的第1个维度上除第0号外的所有元素(都是由4个元素的单个数组)、b的第1个维度上的所有最后一个位置上的元素(都是由4个元素的单个数组)。
  • b[:, 0:2:]提取了b的第1个维度上的第0和1两个元素,两个元素都是一个有4个元素的数组,共同组成一个三维数组。
  • b[::, 0]、b[::, 1]、b[::, -1]分别提取了b的第2个维度上的0、1和-1个元素(这里的元素就是单个有4个元素的数组),每个元素都是有4个元素的数组。
  • b[::, 0:2]提取了b的第2个维度上的第0和1两个元素(这里的元素就是单个有4个元素的数组),两个元素都是有4个元素的数组。
  • b[:,:, 0]、b[:,:, 1]、b[:,:, -1]分别提取了b的第2个维度的所有元素(即有4个元素的数组)中的第0、1和-1个元素值,每个元素都是单个元素值。
  • b[:,:, 0:2]提取了b的第2个维度的所有元素(即有4个元素的数组)中的第0和1两个元素值,两个元素都是单个元素值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中反射用法实例
Mar 27 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
Python ATM功能实现代码实例
Mar 19 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
改变 Python 中线程执行顺序的方法
Sep 24 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
Python3使用tesserocr识别字母数字验证码的实现
Jan 29 Python
python flask框架快速入门
May 14 Python
Django框架视图介绍与使用详解
Jul 18 #Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 #Python
使用django实现一个代码发布系统
Jul 18 #Python
python 将字符串中的数字相加求和的实现
Jul 18 #Python
TensorFlow实现简单的CNN的方法
Jul 18 #Python
windows上安装python3教程以及环境变量配置详解
Jul 18 #Python
Django 开发环境配置过程详解
Jul 18 #Python
You might like
php中error与exception的区别及应用
2014/07/28 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
基于JavaScript实现自定义滚动条
2017/01/25 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
python读取oracle函数返回值
2016/07/18 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
2019/06/21 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
美国二手奢侈品寄售网站:TheRealReal
2016/10/29 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
工程采购员岗位职责
2014/03/09 职场文书
超市开店计划书
2014/04/26 职场文书
业务内勤岗位职责
2014/04/30 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
楚门的世界观后感
2015/06/03 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书