Вернуть индексы матрицы переменного размера - PullRequest
2 голосов
/ 19 января 2012

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

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

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

1 Ответ

7 голосов
/ 19 января 2012

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

...