详解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多线程编程中的join函数使用心得
Sep 02 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
详细介绍Python中的偏函数
Apr 27 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
Python实现两款计算器功能示例
Dec 19 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
Python super()方法原理详解
Mar 31 Python
如何理解Python中的变量
Jun 01 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
浅谈python 类方法/静态方法
Sep 18 Python
python try...finally...的实现方法
Nov 25 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
德生9700DX电路分析
2021/03/02 无线电
用PHP读注册表
2006/10/09 PHP
PHP4.04简明安装
2006/10/09 PHP
php定义一个参数带有默认值的函数实例分析
2015/03/16 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
jQuery的学习步骤
2011/02/23 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
js实现验证码功能
2020/07/24 Javascript
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
用Python进行基础的函数式编程的教程
2015/03/31 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
EJB的角色和三个对象
2015/12/31 面试题
自荐书封面下载
2013/11/29 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
平安校园建设方案
2014/05/02 职场文书
运动会演讲稿50字
2014/08/25 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
详解GaussDB for MySQL性能优化
2021/05/18 MySQL
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技