形状:
让 M 成为您的 n 维数组:
参考图片: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"层”
如果您愿意,可以将形状视为(lines、columns、layers、...),但当您谈论的是四维数组或更大的数组(也许您可以将它们命名为 stacks of blocks 用于第四维)。
无论如何,更好的命名约定如下:
M (轴 0, 轴 1, 轴 2, ..., 轴n) 如参考图片所示。
要在 Python 中查找数组的形状,只需编写:M.shape
切片:
在数组索引中,逗号分隔数组的维度:
M [轴 0, 轴 1, 轴 2, ..., 轴 n时间>]
对于每个轴,您可以具有以下切片结构:
[开始:停止:步骤]其中:
-
start:所选轴的第一个索引(包含在结果中)
-
stop:所选轴的最后一个索引(不包括在结果中)
-
stop = len(axis)为默认结束索引(无需指定)
-
step:遍历选中轴的步长:
-
step = 0 不允许
-
step = 1为默认步长(无需指定)
-
step = -1 表示反向遍历
-
step = n 表示从 n 到 n 步
以下切片是等效的:
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 0、axis 1 和 axis 2 获取所有内容
- 您只需从 axis 3 获取索引 a
一个四维数组可以想象成一个三维块的堆栈/数组,你的切片意味着:从每个块的每个矩阵中取出 a 列,最后得到一个三维数组。