微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于python中三维数组的切片问题详解+通俗易懂

要想弄清楚三维数组的切片问题,首先要明白三维数组的维度,定义一个三维数组,将其维度打印输出

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)
输出结果:
(3, 3, 4)
第一个数表示该三维数组中二维数组的个数,
第二个和第三个参数表示二维数组的行和列,
即这个三维数组中有3个3行4列的二维数组

接下来以实际的输出结果来逐一解释对这三个维度的操作问题:

  1. 第0维度:
print("b[0, ::]")
print(b[0, ::], b[0, ::].shape)
print("b[1, ::]")
print(b[1, ::], b[1, ::].shape)
print("b[-1, ::]")
print(b[-1, ::], b[-1, ::].shape)
print("b[0:2, ::]")
print(b[0:2, ::], b[0:2, ::].shape)
输出结果分析:
b[0, ::]
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]] (3, 4)
 第一个维度表示三维数组中二维数组的个数,
 b[0, ::]将三维数组中的第一个二维数组输出
 
b[1, ::]
[[13 14 15 16]
 [17 18 19 20]
 [21 22 23 24]] (3, 4)
b[1, ::]将三维数组中的第二个二维数组输出

b[-1, ::]
[[25 26 27 28]
 [29 30 31 32]
 [33 34 35 36]] (3, 4)
 负数表示从后向前逆向操作,
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]]] (2, 3, 4)
当出现b[m:n, ::]这样的形式,表示对第0维度中的(m,n-1)号元素进行操作
b[0:2, ::]表示取出第一个和第二个二维数组
  1. 第1维度:
print("b[:, 0:]")
print(b[:, 0:], b[:, 0:].shape)
print("b[:, 1:]")
print(b[:, 1:], b[:, 1:].shape)
print("b[:, -1:]")
print(b[:, -1:], b[:, -1:].shape)
print("b[:, 0:2:]")
print(b[:, 0:2:], b[:, 0:2:].shape)
输出结果分析:
b[:, 0:]
[[[ 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)
b[:, 0:]表示将每一个二维数组从第0行开始,全部输出,得到一个完整的三维数组

b[:, 1:]
[[[ 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)
b[:, 1:]表示将每一个二维数组从第1行开始,全部输出

b[:, -1:]
[[[ 9 10 11 12]]

 [[21 22 23 24]]

 [[33 34 35 36]]] (3, 1, 4)
b[:, -1:]表示将每一个二维数组的最后一行全部输出

b[:, 0:2:]
[[[ 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:2:]表示将每一个二维数组的第0行和第1行全部输出  
  1. 第2维度:
print("b[::, 0]")
print(b[::, 0], b[::, 0].shape)
print("b[::, 1]")
print(b[::, 1], b[::, 1].shape)
print("b[::, -1]")
print(b[::, -1], b[::, -1].shape)
print("b[::, 0:2:]")
print(b[::, 0:2:], b[::, 0:2].shape)
输出结果分析:
b[::, 0]
[[ 1  2  3  4]
 [13 14 15 16]
 [25 26 27 28]] (3, 4)
b[::, 0]取每个二维数组的第0行

b[::, 1]
[[ 5  6  7  8]
 [17 18 19 20]
 [29 30 31 32]] (3, 4)
b[::, 1]取每个二维数组的第1行

b[::, -1]
[[ 9 10 11 12]
 [21 22 23 24]
 [33 34 35 36]] (3, 4)
b[::, -1]取每个二维数组的最后一行

b[::, 0:2:]
[[[ 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:2:]取每个二维数组的第0行和第1行
  1. 注意:第1维度和第2维度的区别:
    如:b[:, 0:]取的是整个三维数组(从每个二维数组的第0行开始至尾行),而b[::, 0]取的是三维数组中的部分(每个二维数组的第0行)

原文地址:https://www.jb51.cc/python/1120857.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐