2

任何人都可以提供/参考多维行主要顺序的“索引->偏移”*转换的倒数。此外,(伪)代码将不胜感激。

举个例子,简化了引发我的问题的特定问题:我有一个 3 维数据层次结构,用 (a,b,c) 跨越的空间表示,其中 a、b 和 c 是大于或等于零的整数小于 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++ 编写。

4

1 回答 1

4

如果指数计算为

offset = row + column*NUMROWS

那么倒数将是

row = offset % NUMROWS
column = offset / NUMROWS

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

这假设第一个元素位于偏移量 0、行 0 和列 0。如果它们从 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
于 2012-05-31T06:11:06.403 回答