这个 'a' 在 Python ( W[: , : , : , a] )中切片的目的是什么?

What is the purpose of this 'a' in this array slicing in Python ( W[: , : , : , a] )?

代码示例如下:

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

这里a是整数

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

形状:

M成为你的n维数组:

Reference image: 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“图层”

如果你愿意,你可以将形状想象为(线 ,...),但是当你谈论四维数组或更大的数组时,事情就变得复杂了(也许你可以将它们命名为 stacks of blocks for fourth dimension)。

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

M (轴 0, 轴 1, 轴 2 , ..., axis 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表示从nnstep

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

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

M [轴的起始索引0:轴的停止索引0 : 轴步进 0,
轴的起始索引1:轴的停止索引1:轴的步长1,
轴的起始索引2:轴的停止索引2:轴的步长2,
...
轴的起始索引n:轴的停止索引n:轴的步长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是一个四维数组
  • 你从 轴 0轴 1轴 2
  • 你只从 轴 3
  • 中获取索引 a

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