形式:
C=A.gather(dim,B)
其中A为原始矩阵,B为下标矩阵,C为结果矩阵。
函数目的:借助下标依次递增的潜规则,取出原始矩阵A中,与下标矩阵B对应的部分。
注:
- C与B的尺寸一致——体现“对应性”
- A与B的尺寸size不需要一致(比如3,3与1,3),但维度必须一致(比如都是两个维度)——更具体一点,A和B之间只是dim参数对应的维度不用保持一致,其余维度也是一致的
举例,对于原始矩阵A
取下标矩阵C=[[2,1,0]],我们进行如下操作
解释:9,7,5产生的原因——dim取0,表示第0维取对应的下标数字,而其他维度对应递增即可。因为一共就2个维度,与[[2,1,0]]适配的,就是[[0,1,2]]——(最外面的括号对应维度0,里面一层对应维度1。可见,维度0固定不变,维度1内部依次递增)。
所以[[2,1,0]]对应的,其实就是第0维度之外的(剩下就只有第1维度)1维度依次递增的[[0,1,2]],即2,0->9; 1,1->7; 0,2->5
但是,如果我们想取第一列的话,怎么办呢,可以像这样
像这样, 同样是第0维度不变,[[2],[1],[0]]中的,[2],[1],[0]都是在最外层[]的第0维度中,所以1维度就不依次递增了,即2,0->9;1,0->6;0,0->3。
要继续体现依次递增的话,我们可以扩充[0],[1],[2]的内部,如
在这里,[2,2],[1,1],[0,0]各自内部的行下标就不依次递增(同为第0/1/2行),但之间的列下标就依次递增了(0->1)
类似的,如果取第1维度固定,下标维度还是[[2,1,0]]的话
得到5,4,3的原因则是类似的,这里第1维度固定,而剩下的第0维度[[2,1,0]]只有1个数组,实际上也就依次递增是不变的,即[0,0,0],就有0,2->5;0,1->4;0,0->3
好了,刚刚都是由果溯因,现在我们由因得果的实战一波:
假设我们有这么一个数组
如果我们想把1,7,11取出来(贯穿行),则可以按照如下思路,
首先,1,7,11是在递增的三行,所以dim取1(行依次递增,列取下标)
其次,下标矩阵(保持维度一致)应该就是[[1],[2],[1]](内部的[]之间,对应行下标依次递增)
那如果我们想把5,1,7,13,9取出来呢(贯穿列)?就像如下这样做。
总结:你想按照你的下标取的那一个维度,就是dim的取值。而判断内部数字下标的其余维度是否递增,由
- dim
- 下标矩阵里的两个下标是否在同一维度x
- 如果2中的两个数字在同一维度x,x与dim是否相同
共同决定。
x=dim | x≠dim | |
下标矩阵的两个数字在同一维度x | 不存在,否则报错 | 其余维度递增 |
下标矩阵的两个数字不在同一维度x | 无关 | dim维度递增 |