У меня есть матрица A с размером (nr, nc), вектор индексов столбцов B (поэтому B имеет размер (nr, 1), и каждый элемент в B является целым числом от 1 до nc), и я хочу сделайте что-нибудь для каждого элемента в A, который имеет форму A (i, B (i)) для i между 1 и nr, ключевым фактором является эффективность.
Для конкретности, скажем, C является вектором размера (nr, 1), цель состоит в том, чтобы сделать
for i=1:nr
A(i,B(i))=A(i,B(i))+C(i)
end
более эффективно. Контекст обычно такой: nr >> nc (потому что когда nr большое, векторизация эффективна для многих операций). Я получил ускорение в 3 раза благодаря использованию функции индикатора:
for k=1:nc
A(:,k)=A(:,k)+(k==B).*C
end
Есть ли другие способы (более эффективные, надеюсь) сделать это?
Я полагаю, что это похоже на многие вопросы о двойной индексации, но конкретно я сталкиваюсь с этим все время.