Как вычислить сумму векторов - PullRequest
0 голосов
/ 28 июня 2018

Я знаю, что этот вопрос задавался несколько раз, но этот ответ не работает для меня. Я хочу вычислить суммирование следующим образом

equivation * * 1006

, где h(x) = X*theta, theta - матрица n x1, а X - матрица m x n. Я пытался написать так:

 f = @(z)(sum(X(z,:)*theta) - y(z))^2;
 v = sum(f([1:m])); % m is length of y

Но это дало мне эту ошибку:

error: for x^A, A must be a square matrix.  Use .^ for elementwise power.
error: called from
    computeCost>@<anonymous> at line 26 column 35
    computeCost at line 27 column 4
    ex1 at line 63 column 3

Мой эквивалент для версии цикла выглядит так:

v = 0;
for i = 1:m
  v = v + (sum(X(i,:)*theta) - y(i))^2;
end

Пожалуйста, дайте мне знать, как я могу векторизовать этот цикл.

1 Ответ

0 голосов
/ 28 июня 2018

Этот код:

v = 0;
for i = 1:m
  v = v + (sum(X(i,:)*theta) - y(i))^2;
end

идентичен этому коду:

v = 0;
for i = 1:m
  v = v + (X(i,:)*theta - y(i))^2;
end

(подсказка: X(i,:)*theta является точечным произведением и возвращает скаляр).

Чтобы векторизовать это, просто сложите результат:

v = (X*theta - y).^2;
v = sum(v);

Предполагается, что y является матрицей столбцов (m x 1). Обратите внимание, что я использовал .^, как указано в сообщении об ошибке. Это мощность каждого элемента, а не мощность матрицы ^.

...