В MATLAB нет оператора, который бы это делал.Однако, если ваши индексы (например, bar
в вашем примере) были сохранены в массиве ячеек , то вы можете сделать это:
bar = {3,4,5}; %# Cell array instead of standard array
foo(bar{:}); %# Pass the contents of each cell as a separate argument
{:}
создает разделенный запятыми список из массива ячеек.Это, вероятно, самая близкая вещь, которую вы можете получить к форме «оператора», которую вы имеете в своем примере, кроме переопределения одного из существующих операторов (показано здесь и здесь ) чтобы он генерировал разделенный запятыми список из стандартного массива или создавал свой собственный класс для хранения ваших индексов и определял, как для него работают существующие операторы (ни один вариант для слабонервных!).
Для вашего конкретного примера индексации произвольного массива ND вы также можете вычислить линейный индекс по индексам подписки, используя функцию sub2ind
(подробности здесь и здесь), но в конечном итоге вы могли бы выполнить больше работы, чем в моем решении с разделенными запятыми списками выше.Другой альтернативой является , вычисляющий линейный индекс самостоятельно , который обойдется , преобразуя в массив ячеек и используя только матричные / векторные операции.Вот пример:
% Precompute these somewhere:
scale = cumprod(size(Q)).'; %'
scale = [1; scale(1:end-1)];
shift = [0 ones(1, ndims(Q)-1)];
% Then compute a linear index like this:
indices = [3 4 5];
linearIndex = (indices-shift)*scale;
Q(linearIndex) % Equivalent to Q(3,4,5)