这个 '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 数组就像一堆矩阵,其中:
- 第一个索引i,选择矩阵
- 第二个索引 j 选择行
- 第三个索引k,选择列
形状:
让M成为你的n维数组:
Reference image: https://fgnt.github.io/python_crashkurs_doc/_images/numpy_array_t.png
- M (x,) 的形状表示您的数组有 x 行
- M (x, y) 的形状表示您的数组有 x 行 和 y 列
- 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]
对于每个轴,您可以具有以下切片结构:
[开始:停止:步骤] 其中:
- start: 所选轴的第一个索引(包含在结果中)
- start = 0为默认起始索引(不需要指定)
- stop: 所选轴的最后一个索引(不包括在结果中)
- stop = len(axis)为默认结束索引(不需要指定)
- step: 遍历所选轴的步数:
- step = 0 不允许
- step = 1为默认步长(不需要指定)
- step = -1表示反向遍历
- step = n表示从n到nstep
以下切片是等价的:
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列块,最后得到一个三维数组。
代码示例如下:
weights = W[:,:,:,a]
这里a是整数
在数组切片中,我需要对 Python 的切片表示法有一个很好的解释(有参考文献者优先)。我不明白这个 'a' 的目的是什么。我们知道 3D 数组就像一堆矩阵,其中:
- 第一个索引i,选择矩阵
- 第二个索引 j 选择行
- 第三个索引k,选择列
形状:
让M成为你的n维数组:
Reference image: https://fgnt.github.io/python_crashkurs_doc/_images/numpy_array_t.png
- M (x,) 的形状表示您的数组有 x 行
- M (x, y) 的形状表示您的数组有 x 行 和 y 列
- 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] 对于每个轴,您可以具有以下切片结构:
[开始:停止:步骤] 其中:
- start: 所选轴的第一个索引(包含在结果中)
- start = 0为默认起始索引(不需要指定)
- stop: 所选轴的最后一个索引(不包括在结果中)
- stop = len(axis)为默认结束索引(不需要指定)
- step: 遍历所选轴的步数:
- step = 0 不允许
- step = 1为默认步长(不需要指定)
- step = -1表示反向遍历
- step = n表示从n到nstep
以下切片是等价的: 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列块,最后得到一个三维数组。