A
является 3D-N * N * L матрица, x
является N * 1 вектор, на котором мне нужно сделать следующую операцию:Как сделать быстрое многомерное матричное векторное умножение?
for i=1:L
res(i)=x'*squeeze(A(:,:,i))*x
end
Я надеюсь использовать наиболее эффективный векторизованную метод вместо for
петля. Пожалуйста, дайте мне несколько советов?
Я предлагаю быть более конкретным: вам не требуется умножение матричных векторов, но вычисляется квадратичная форма. Но возможно, что для меня это только имеет значение :) –
Я не могу попробовать это прямо сейчас, но вы можете быть чем-то вроде 'sum (sum (bsxfun (@ times, permute (bsxfun (@ times, permute (A , [3 1 2]), reshape (x, [1 1 N])), [1 3 2]), reshape (x, [1 1 N])), 2), 2) ' –
@ J.Andrew Я вернул свой вопрос в прежнее состояние. Это связано с тем, что вы обновили свой вопрос, сделав оба ответа, в том числе тот, который вы приняли как «полезный» устаревший. Если у вас есть новый вопрос, пожалуйста, откройте новый вопрос, а не расширьте его. – Adriaan