逆(列)行 - 主要顺序转换

时间:2012-05-29 16:23:44

标签: math

任何人都可以提供/参考'指数 - 的反转 - >多维行主要订单的偏移'*转换。此外,(伪)代码将不胜感激。

举一个例子,简化了提出我问题的特定问题: 我有一个3维数据层次结构,用(a,b,c)跨越的空间表示,其中a,b和c是大于或等于0且小于N_a,N_b和N_c的整数。我想将数据表示为一维数组。然后按行如下给出“偏移”,“行 - 主要顺序”:

 int offset(a, b, c){
      return a*N_b*N_c + b*N_c + c;
}

然后是反向转换,即:

int a(int offset);
int b(int offset);
int c(int offset);

此外,如何将其推广到第N维索引?提出这个问题的问题是第5维。

如果重要,我用c / c ++编写。

1 个答案:

答案 0 :(得分:3)

如果索引计算为

offset = row + column*NUMROWS

然后反过来

row = offset % NUMROWS
column = offset / NUMROWS

其中%是模数,/是整数除法。

这假设第一个元素位于偏移0,第0行和第0列。如果它们从1开始,则必须在适当的位置加1或减1。


对于更高的尺寸,您必须为每个尺寸重复此操作。

offset = x + WIDTH*(y + HEIGHT*(z + DEPTH*time));

和反向

x = offset % WIDTH
offset = offset / WIDTH

y = offset % HEIGHT
offset = offset / HEIGHT

z = offset % DEPTH
offset = offset / DEPTH

time = offset

您还可以提取特定坐标:

z = (offset / (WIDTH * HEIGHT)) % DEPTH