Быстрый тест:
function [] = fun1()
a = [1 2 3 4]';
b = [0 0 1 0];
tic;
for i=1:1000000
r = a(3);
end
toc;
end
Истекшее время: 0,006 секунды
Изменить a(3)
на b*a
Истекшее время: 0,9 секунды
Разница в производительности довольно очевидна (и вы должны были сделать это самостоятельно, прежде чем задавать этот вопрос).
Причина этого:
Независимо от того, насколько эффективны вычисления MATLAB, MATLAB по-прежнему необходимо извлечь число 1 на 1, выполнить умножение 1 на 1 и суммировать. Нет надежды быть быстрее, чем один доступ.
В вашем особом случае есть все 0, кроме 1, но, по моему мнению, бесполезно проводить оптимизацию для отдельного особого случая, и для лучшей оптимизации, которую я могу придумать, по-прежнему требуется доступ ко всем элементам хотя бы один раз каждый.
EDIT:
Кажется, у меня сегодня хорошее настроение ...
Изменить a(3)
на a(1)*b(1)+a(2)*b(2)+a(3)*b(3)+a(4)*b(4)
Истекшее время: 0,02 секунды
Кажется, что проверка границ (и / или других поручений) занимает больше времени, чем доступ и расчет.