【问题标题】:What is the purpose of this 'a' in this array slicing in Python ( W[: , : , : , a] )?在 Python 中的这个数组切片中这个 'a' 的目的是什么( W[: , : , : , a] )?
【发布时间】:2020-09-10 02:33:42
【问题描述】:

下面是代码示例:

weights = W[:,:,:,a]

这里,a是一个整数

在数组切片中,我需要对 Python 的切片表示法进行很好的解释(参考是​​加分项)。我不明白这个'a'的目的是什么。我们知道 3D 数组就像一堆矩阵,其中:

  • 第一个索引 i 选择矩阵
  • 第二个索引 j 选择行
  • 第三个索引 k 选择列

【问题讨论】:

  • 它看起来像一个 4D numpy 数组,而不是 3D。
  • @NafizAhmed 是的,这里是一个 4D 数组。

标签: python arrays numpy-slicing


【解决方案1】:

形状:

M 成为您的 n 维数组:

参考图片:https://fgnt.github.io/python_crashkurs_doc/_images/numpy_array_t.png

  1. 形状为 M (x,) 表示您的数组有 x 行
  2. 形状为 M (x, y) 表示您的数组有 x 行y 列
  3. M (x, y, z) 的形状表示您的数组有 x 行y 列z"层”

如果您愿意,可以将形状视为(linescolumnslayers、...),但当您谈论的是四维数组或更大的数组(也许您可以将它们命名为 stacks of blocks 用于第四维)。

无论如何,更好的命名约定如下:

M (轴 0, 轴 1, 轴 2, ..., 轴n) 如参考图片所示。

要在 Python 中查找数组的形状,只需编写:M.shape

切片:

在数组索引中,逗号分隔数组的维度: M [轴 0, 轴 1, 轴 2, ..., 轴 n时间>] 对于每个轴,您可以具有以下切片结构:

[开始:停止:步骤]其中:

  1. start:所选轴的第一个索引(包含在结果中)
  • start = 0为默认开始索引(无需指定)
  1. stop:所选轴的最后一个索引(不包括在结果中)
  • stop = len(axis)为默认结束索引(无需指定)
  1. step:遍历选中轴的步长:
  • step = 0 不允许
  • step = 1为默认步长(无需指定)
  • step = -1 表示反向遍历
  • step = n 表示从 nn

以下切片是等效的: M [0:n+1:1], M [:] 和 M[::] 根据默认 strong> 价值观。

混合在一起,现在我们可以用通用的切片符号来编写:

M [start-index-for-axis 0 : stop-index-for-axis 0 : step-for -轴0,
start-index-for-axis 1 : stop-index-for-axis 1 : step-for-axis 1我>,
start-index-for-axis 2 : stop-index-for-axis 2 : step-for-axis 2我>,
...
start-index-for-axis n : stop-index-for-axis n : step-for-axis n],

足够的理论,让我们看一些例子

我们有 M,一个二维数组,形状为 (5, 5):

M = np.arange(1, 26).reshape(5, 5)
print(M)

结果:

[[ 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]]

print('Traverse the matrix from the last line to the first one (axis=0)', matrix[::-1],  sep='\n')

结果:

[[21 22 23 24 25]
[16 17 18 19 20]
[11 12 13 14 15]
[ 6  7  8  9 10]
[ 1  2  3  4  5]]

print('The 3 columns in the middle of the matrix (take all data from axis=0, and take a slice from axis=1):' , matrix[:, 1:4],sep='\n')

结果:

[[ 2  3  4]
[ 7  8  9]
[12 13 14]
[17 18 19]
[22 23 24]]

现在,您的切片:W [:, :, :, a],其中 a 是一个整数变量,可以被解释如:

  • M是一个四维数组
  • 您从 axis 0axis 1axis 2 获取所有内容
  • 您只需从 axis 3 获取索引 a

一个四维数组可以想象成一个三维块的堆栈/数组,你的切片意味着:从每个块的每个矩阵中取出 a 列,最后得到一个三维数组。

【讨论】:

  • 谢谢。我明白了。
猜你喜欢
  • 2012-02-13
  • 2015-12-14
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多