任何人都可以提供/参考'指数 - 的反转 - >多维行主要订单的偏移'*转换。此外,(伪)代码将不胜感激。
举一个例子,简化了提出我问题的特定问题: 我有一个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 ++编写。
答案 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