Я предполагаю, что под "индексами [x1 x2 ... xd]" вы подразумеваете индексы по каждому измерению эквивалентного d-мерного массива.
Вам необходимо преобразовать L и d в массив измеренийи затем захватите несколько аргументов из ind2sub
.Вот функция, которая делает это.Вы можете назвать это как x = myind2sub(L, d, i)
.
function out = myind2sub(L, d, ix)
sz = repmat(L, [1 d]); %// dimension array for a d-dimension array L long on each side
c = cell([1 d]); %// dynamically sized varargout
[c{:}] = ind2sub(sz, ix);
out = [c{:}];
Но вы должны также спросить, почему вы храните его в линейном массиве и вычисляете индексы, а не просто сохраняете его в многомерном массиве в первую очередь,В Matlab многомерный массив хранится в непрерывном блоке памяти, поэтому он эффективен, и вы можете индексировать его, используя либо многомерные индексы, либо линейное индексирование.Если у вас есть линейный массив, просто вызовите reshape(myarray, sz)
, чтобы преобразовать его в многомерный эквивалент.