Math 逆(列)行主序变换

Math 逆(列)行主序变换,math,Math,任何人都可以提供/引用多维行主顺序的“索引->偏移量”*转换的逆运算。此外,伪代码也将受到赞赏 举个例子,对引发我问题的特定问题进行简化: 我有一个三维数据层次结构,用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); i

任何人都可以提供/引用多维行主顺序的“索引->偏移量”*转换的逆运算。此外,伪代码也将受到赞赏

举个例子,对引发我问题的特定问题进行简化: 我有一个三维数据层次结构,用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维指数化?提出这个问题的问题是第五维度的


如果有关系,我是用c/c++编写的。

如果索引计算为

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

如果指数计算为

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

你能稍微澄清一下你的问题吗?我想我也许能帮上忙,但我不太清楚你在问什么。你能把你的问题澄清一点吗?我想我也许能帮上忙,但我不知道你在问什么。嗨,谢谢你的回复。我实际上是在问,因为我有一个5维索引的案例。我很抱歉没有说清楚。我很快会在OP中这样做。嗨,谢谢你的回复。我实际上是在问,因为我有一个5维索引的案例。我很抱歉没有说清楚。我将很快在OP中这样做。