Это очень тесно связано с другим вопросом , но этот вопрос хотел избежать sub2ind
из-за проблем с производительностью. Меня больше беспокоит «нелегальность» использования sub2ind
.
Давайте предположим, что я хочу создать еще одну матрицу MxN со всеми нулями, кроме одной записи в каждом столбце, которую я хочу назначить из соответствующей записи в векторе, а выбор строки в каждом столбце основан на другом векторе. Например:
z = zeros(10,4);
rchoice = [3 1 8 7];
newvals = [123 456 789 10];
% ??? I would like to set z(3,1)=123, z(1,2)=456, z(8,3)=789, z(7,4)=10
Я могу использовать sub2ind
для выполнения этого (который я использовал в ответе на тесно связанный вопрос ):
z(sub2ind(size(z),rchoice,1:4)) = newvals
но есть ли другая альтернатива? Похоже, логическая адресация может быть использована каким-то образом, но я в замешательстве, потому что для установки элементов логической матрицы в 1 вы имеете дело с теми же позициями элементов, что и в той матрице, которую вы действительно хотите адресовать.