Вернуть индексы матрицы переменного размера

Мне нужно иметь возможность возвращать индексы [x1 x2 ... xd] элементов матрицы измерений LxLxL..xL. Число измерений d - это переменная, предоставленная моей функции. Матрица не существует, вместо этого у меня есть линейный массив длины L^d. Для данного индекса i в массиве я хотел бы знать эквивалентные индексы в матрице. Я уже могу сделать это, используя простой цикл for, но мне любопытно узнать, могу ли я как-нибудь использовать ind2sub. У меня проблема в том, что если я делаю

x=zeros(1,d)
x=ind2sub(L,i)

x переназначается одно число, а не массив всех подписок. Есть ли способ сделать это?

1 ответ

Решение

Я предполагаю, что под "индексами [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) преобразовать его в многомерный эквивалент.

Другие вопросы по тегам