Это не красиво, но это один вкладыш:
matrix(size(matrix,1) * (values(:,2) - 1) + values(:,1)) = values(:,3)
Я могу сделать это немного яснее, разбив его на две строки. Идея состоит в том, что вы преобразуете первые два столбца values
в одномерный индексный вектор, который имеет столько элементов, сколько имеется значений, которые должны быть назначены, а затем присваиваете значения:
index = size(matrix,1) * (values(:,2) - 1) + values(:,1)
matrix(index) = values(:,3)
Когда вы индексируете матрицу с вектором, она сначала отсчитывает столбцы, а затем по строкам. Чтобы было еще яснее, разбейте первое утверждение еще на несколько:
numRows = size(matrix,1)
rowIndex = values(:,1)
colIndex = values(:,2)
vals = values(:,3)
index = numRows * (colIndex - 1) + rowIndex
matrix(index) = vals
На самом деле, вам не нужно проходить через все трудности построения вектора index
, так как для этого существует функция sub2ind
:
index = sub2ind(size(matrix), rowIndex, colIndex)
matrix(index) = vals
хотя я думаю, что приятно видеть, как получить результаты, позвонив по номеру sub2index
, для вашего собственного образования.