Вы можете использовать функцию sub2ind
, чтобы получить линейный индекс из индекса.
Пример:
A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
selectElement={2,3}; %# get the element at position 2,3 in A.
indx=sub2ind(size(A),selectElement{:});
A(indx)
ans =
10
В приведенном выше примере я сохранил индексы (может быть любым числом измерений) как cell
. Если он хранится как вектор, просто используйте num2cell()
, чтобы преобразовать его в ячейку.
Теперь вы можете легко присвоить ему значение A(indx)=value;
. Я использовал переменные, отличные от ваших, чтобы сохранить общий ответ, но идея та же, и вам просто нужно заменить имена переменных.
Вы также упомянули в своем посте, что вы переходите от (1,1,1)
к некоторому значению (1000,15,3)
и присваиваете значение каждому из этих пунктов. Если вы зацикливаетесь на столбцах, вы можете заменить всю эту операцию векторным решением.
Пусть finalElement={1000,15,3}
будет последним шагом цикла. Как и раньше, найдите линейный индекс как
index=sub2ind(size(A),finalElement{:});
Теперь, если у вас есть значения, которые вы назначаете в цикле, которые хранятся как один вектор, values
, вы можете просто назначить его за один шаг как
A(1:index)=values;