Tradução bidirecional entre matrizes 1D e 3D

Então, eu estava fazendo uma codificação CUDA e queria uma interface para traduzir índices de arrays 3D (conveniente de usar, mas não adequado em GPU) e arrays “kernel” 1D (dor para decifrar índices, mas muito mais rápido que 3D).
Em outras palavras, eu queria uma relação que mapeie ( ié o índice em 1D):

(x,y,z) -> i

Assim como:

i -> (x,y,z)

Aqui está o que eu usei para obter o índice 1D:

i = x + y * max_x + z * max_x * max_y

Essa foi fácil. É assim que funciona ao contrário:

x = i % max_x
y
= ( i / max_x ) % max_y
z
= i / ( max_x * max_y )

Nota: max ({x, y, z}) denota o valor máximo possível do índice, isto é, o tamanho da submatriz (como na definição de C de arr[maxx][maxy][maxz]).

Na verdade, fiz a matemática por trás disso!