2014-02-06 3 views
2

У меня есть матрица A (n, m), и я хочу умножить ее на вектор b (n), так что результат B [n, m] = A [n, m] * b [ п]. Это можно сделать, создав новую матрицу C=b*ones(1,m), а затем используйте умножение точки: B=A.*C, но это пустая трата памяти (размер A составляет 5000 * 1000). Можно использовать циклы. Может быть, есть более элегантный способ сделать это?Умножить матрицу на вектор

ответ

5

Использование bsxfun, что только для этого:

B = bsxfun(@times, A, b(:)); 
0

Ваша первая идея была хорошей. Сгенерируйте C с элементами b, а затем умножьте B = A. * C. Но вы правы, это займет много памяти. Если вы делаете что-то подобное, но создаете матрицу C только диагональю разреженной матрицы, она будет делать то же самое, но сэкономить много памяти.

B = spdiags(b,0,n,n)*A; 

Ваша матрица теперь в левой части А, потому что вы масштабирование строк, но кладя новую диагональную матрицу в левой стороне вы будете делать то же самое для столбцов.

Смежные вопросы