Преобразование линейных массивов данных столбца-мажора в ряд-мажор - PullRequest
2 голосов
/ 27 февраля 2010

У меня есть основанный на Фортране трехмерный массив старшего порядка столбцов, уплощенный в линейную память. Какую формулу / алгоритм я могу использовать, чтобы отобразить ее обратно в массив трехмерных порядков строк Java? Например,

|1, 2, 3| |10, 11, 12| |19, 20, 21|
|4, 5, 6| |13, 14, 15| |22  23, 24|
|7, 8, 9| |16, 17, 18| |25, 26, 27|

Похоже на это в памяти

буфер = 1, 4, 7, 2, 5, 8, 3, 6, 9, 10, 13, 16, 11, 14, 17, 12, 15, 18, 19, 22, 25, 20, 23 , 26, 21, 24, 27

В идеале мне нужно передать индексы массива и вернуть смещение в линейную память. В псевдокоде что-то вроде

for(;;)
{
   javaarray[2][2][1] = buffer[Util.LookupOffset(2,2,1)]
}

Спасибо.

1 Ответ

2 голосов
/ 27 февраля 2010

Во-первых, индексы массива Java основаны на 0, поэтому вам нужно javaarray [1] [2] [0] вместо javaarray [2] [3] [1].

Во-вторых, я понимаю, что вы пытаетесь сделать.

  • Ввод: 0,0,0 (слот с 1 в нем) => вывод: 0 (индекс 1 в сплющенный массив)
  • Вход: 1,2,0 (слот с 12 в нем) => вывод: 15 (индекс 12 в сплющенном массиве)
  • Вход: 2,1,2 (слот с 26 в нем) => Выход: 23 (индекс 26 в уплощенном массиве)

Похоже, что вы хотите, для ввода (i, j, k):

index = 9 * i + 3 * j + k
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...