Адресация массива переменной длины в Matlab - PullRequest
0 голосов
/ 24 марта 2011

Я уверен, что есть простой ответ на этот вопрос, но я не совсем уверен, что искать.У меня есть массив M измерений D, где D ограничен 1 <= D <= 5, и вектор длины D, X. Я хотел бы использовать D в качестве адреса в пределах M и увеличить значениепо этому адресу, поэтому, если бы D было <code>[1 2 3], я бы хотел увеличить M(1,2,3).Я знаю, что могу сделать это так:

if D == 1
  M(X(1)) = M(X(1)) + 1;
end

if D == 2
  M(X(1), X(2)) = M(X(1), X(2)) + 1;
end

Но это действительно уродливо, и я должен представить, что есть более простой, менее неуклюжий способ.Спасибо!

1 Ответ

3 голосов
/ 24 марта 2011

Вы можете использовать функцию sub2ind для преобразования вектора адреса D в соответствующие размеры в M. Однако для этого потребуется хранить D как ячейку, а не как вектор. Следующий пример должен помочь.

A=magic(5);%# just a test matrix

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

d={3,4};%we need the element at row 3, column 4
indx=sub2ind(size(A),d{:});%# get the index corresponding to the subscript 3,4

A(indx)

ans=
20

Вы также можете напрямую индексировать его в матрицу A как A(sub2ind(size(A),d{:})), не создавая отдельной переменной.

Вы также можете использовать num2cell для преобразования вектора в ячейку. Это может быть лучшим вариантом, так как вы можете сохранить D как вектор для других целей. Таким образом, соответствующая строка становится

indx=sub2ind(size(A),num2cell(d));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...