У меня есть две петли, встроенные в код, который повторяется много раз. Я хочу, чтобы ускорить процесс:Как векторизовать матрицу, индекс которой является матрицей в MATLAB?
for i = 1:10
for j = 1:10
A(i,j) = B(i,j,D(i,j))*C(i,j);
end
end
Здесь D состоит из целых чисел, которые являются индексы к B. Вне зависимости от D для-петли может быть заменена поэлементно умножения матриц. Проблема заключается в том, как оценить B элегантным способом. Я искал SO и MathWorks-страницы и попытался линейной индексации, но это приводит к ошибкам:
d = reshape(D, 100, []);
b = reshape(B, 100, []);
arrayfun(@(x) b(x,d(x)), 1:100);
Что я делаю неправильно? Есть ли способ заменить два for-loops?
Проблема не только оценки 'b' изящным образом, вы перезапись' Ā' все время, которое означает, что единственный результат, вы сможете get - последний слой, т. е. когда 'i = 10' и' j = '10' – Oleg
@OlegKomarov Спасибо, что комментируете! Мой код на самом деле все в порядке и делает то, что он должен был делать: создание элементарной матрицы Matrix 'A' путем умножения элементов' B' и 'C'. Сложная часть - поиск индексов из 'D'. –