Короткий ответ таков:
A(sub2ind(size(A),X,Y)) = V
Попробуйте, это работает как шарм.
Объяснение, если вам любопытно и вы хотите его, просто следовать:
Каждая матрица в Matlab хранится в виде 1d-массива, нормального вектора.
2-мерный массив фактически сохраняется в памяти как последовательность первого столбца, за которым следует второй столбец,и так далее.По этой причине вы можете индексировать любой массив Matlab, независимо от его размера, линейным индексом.
Например:
A = [1 4 7;
2 4 8;
3 6 9 ];
Фактически хранится как:
[1 2 3 4 5 6 7 8 9]
Таким образом, чтобы получить доступ к элементу, все, что вам нужно сделать, это: (j-1) * num_of_columns + i
Из-за этого A (2,3) возвращает то же самое, что и A (8), то есть, в этом случае: 8;
Функция sub2ind преобразует список «индексов» в линейные индексы, учитывая размер матрицы.Именно то, что вы хотите сделать.
И с указателями под рукой, легко сделать назначение.
Документы: sub2ind
Индексирование в Matlab
Надеюсь, я вас правильно понял.
Я долго отвечал, потому что это очень важная часть Matlab, и МНОГОлюди слишком усложняют код, используя функции «векторного управления», чтобы делать то, что можно сделать с помощью обычной индексации.