我们如何从形状和扁平指数中获得n维矩阵的坐标?
我的意思是,如果我有以下(2,3)2维矩阵:
[ [ 0, 1 ],
[ 2, 3 ],
[ *4*, 5 ] ]
...我想从坐标[0,2]中找到粗体索引的值,我该怎么办?
或者如果我有这个(2,2,5)三维矩阵:
[ [ [ nil, nil ],
[ nil, nil ] ],
[ [ nil, nil ],
[ nil, nil ] ],
[ [ nil, *9* ],
[ nil, nil ] ],
[ [ nil, nil ],
[ nil, nil ] ],
[ [ nil, nil ],
[ nil, nil ] ] ]
...而且我知道我想要的坐标的展平索引值为9,如何找到相对坐标为:[1,0,2]?
如果可能的话,我想知道一种通用且简单的方法,它可以处理任何形状的矩阵。
非常感谢你的帮助。
答案 0 :(得分:1)
您可以使用这个简单的算法:
假设您有矩阵A [a] [b] [c] [d](其中a,b,c,d是维度)和索引X.
要获得索引X的第一个坐标,只需将X除以b * c * d。
让它成为下一个矩阵,其大小为[2] [5],索引X = 7
0 1 2 3 4
5 6 7 8 9
首先将X除以最后一个维度以找到第一个坐标。 X / 5 = 1。然后,从那里向前移动并给X值X%= 5。所以你将X = 7%5 = 2。现在,您必须使用相同的算法搜索其余尺寸的坐标。如果到达最后一个维度,坐标将是剩余的X,在这种情况下为2.因此,X = 7的坐标为[1] [2],实际上是安装。
同样,对于一般情况,你有a,b,c,d尺寸 我会注意到(yd)y维度。
X=index
(1d)=X/b*c*d
X gets value X % b*c*d
(2d)=X/c*d
X gets value X % c*d
(3d)=X/d
X gets value X % d
(4d)=X
如果你有尺寸[2] [2] [5],你会得到:
X=9;
(1d) = 9/2*5 = 0
X = 9%10 = 9
(2d) = 9/5 = 1
X = 9%5 = 4
(3d) = 4
Result: [0][1][4] is the 9th element.
要从[0] [1] [4]到索引9,你可以通过相乘来执行反向算法:
X=(1d)*b*c + (2d)*c + 3d = 0 + 1*5 +4 =9