Как мне умножить все элементы в каждой строке данной матрицы на соответствующие элементы данного вектора и сложить их в MATLAB? - PullRequest
0 голосов
/ 07 ноября 2011

Например, учитывая матрицу randn(3,2) - 3 строки, 2 столбца и вектор множителей randn(1,2)) 2 столбца, я хочу получить вектор размером (3, 1), в котором каждая строка будет представлять сумму умножение элементов элементов строки матрицы и заданных множителей, таких как

row_element_1*mul_element_1 + row_element_2*mul_element_2

Ответы [ 3 ]

5 голосов
/ 07 ноября 2011

Звучит так, как будто вы хотите умножение матрицы на вектор.

1> x = randn(3, 2)
x =

   0.62055  -1.08060
  -0.24064  -2.56097
  -0.53202  -0.49712

2> y = randn(1, 2)
y =

  -1.26010  -0.25200

3> x * y'
ans =

  -0.50964
   0.94860
   0.79567

Обратите внимание на транспозицию y'.

2 голосов
/ 07 ноября 2011

Я думаю, что вы можете сделать это с помощью комбинации bsxfun и sum, например:

a = rand(3,2);
b = rand(1,2);
result = sum(bsxfun(@times,a,b),2)

result =

   0.333379034494579
   0.613480382112731
   0.093702948350719

Записать аргумент измерения в SUM для суммирования по каждой строке (вместо значения по умолчанию, которое является столбцами вниз) BSXFUN применяет двоичную функцию со скалярным расширением, которая здесь идеально подходит для умножения.

0 голосов
/ 07 ноября 2011
A = randn(3, 2);
B = randn(1, 2);

C = A(:, 1) * B(1) + A(:, 2) * B(2);   % size(C) = [3, 1]

Если вам нужно масштабировать до гораздо большего массива с большим количеством столбцов и вы не хотите полностью выписывать уравнение для C, вы можете использовать repmat и element-мудрое умножение

A = randn(300, 200);
B = randn(1, 200);

C = sum(A .* repmat(B, 300, 1), 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...