альтернативный способ поэлементного умножения матриц в Matlab

Я работаю над большим умножением матриц. У меня есть большая матрица A (не менее 5000x5000) и вектор-столбец V (5000x1). В моем коде каждый V будет умножать каждый столбец A поэлементно. Я сделал это с петлей

K = zeros(5000, 5000);
for n=1:5000
  K(:, n) = V.*A(:, n);
end

но это так медленно. Поэтому я создаю большую матрицу, в которой каждому столбцу присваивается значение V, так что

MV=repmat(V,1,5000);
K = MV.*A;

это быстро, но это тратит слишком много памяти. Когда размер матрицы увеличивается, она использует слишком много памяти. Есть ли идея использовать меньше памяти, но быстро?


person user1285419    schedule 15.07.2013    source источник
comment
Вы предварительно выделили K, чтобы он имел правильный размер?   -  person Marius    schedule 15.07.2013


Ответы (1)


классический bsxfun

K = bsxfun( @times, A, V );

Кроме того, вы можете просмотреть Джеймса Турсы MTIMESX (найдено в FEX).

person Shai    schedule 15.07.2013
comment
Большое спасибо за ваш вклад. кажется, что bsxfun работает, но мне нужно проверить эффективность позже. Насчет MTIMESX читал ридми но вроде для матричного умножения только не поэлементного. - person user1285419; 15.07.2013