python - 在 Python 中的这个数组切片中这个 'a' 的目的是什么( W[: , : , : , a] )?
问题描述
这是代码示例:
weights = W[:,:,:,a]
这里,a是一个整数
在数组切片中,我需要对 Python 的切片表示法有一个很好的解释(参考是一个加号)。我不明白这个'a'的目的是什么。我们知道 3D 数组就像一堆矩阵,其中:
- 第一个索引 i 选择矩阵
- 第二个索引 j 选择行
- 第三个索引 k 选择列
解决方案
形状:
让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“层”
如果您愿意,您可以将形状视为(线、列、层、...),但是当您谈论四维数组或更大时,事情会变得复杂(也许您可以将它们命名为第四维的块堆栈) .
无论如何,更好的命名约定如下:
M(轴 0,轴 1,轴 2,...,轴 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到n步
以下切片是等效的: M [0:n+1:1]、M [:] 和M [::] 根据默认值。
混合在一起,现在我们可以写一个通用的切片符号:
M [轴起始索引0 : 轴停止索引0 : 轴步进0 ,轴
起始索引1 : 轴停止索引1 : 轴步进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-对于轴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
可以将四维数组想象为三维块的堆栈/数组,您的切片意味着:从每个块的每个矩阵中取出一列,最后得到一个三维数组。
推荐阅读
- google-apps-script - Google 工作表将整个工作表复制到另一个工作表
- python - Python 的美丽汤 - 返回所有复选框?
- python - Alembic 自动生成未检测到当前状态
- javascript - Net.createConnection 不是函数
- nginx - Kubernetes 多容器 pod:如何获取 pod 之间的网络流量... 502 错误?
- r - R:我如何以 1/10 的机会重复模拟多少次尝试才能成功?(并记录尝试了多少次?)
- flutter - Socket Io 错过连接事件
- swiftui - 如何在 SwiftUI 中的视图之间移动?
- amazon-web-services - 每个区域的 Cognito 池与每个租户的 Cognito 池
- python-3.x - RGB 转 HSV 与 BGR 转 HSV 一样吗?