Как вычислить сумму векторов
Я знаю, что этот вопрос задавался много раз, но этот ответ не работает для меня. Я хочу вычислить суммирование следующим образом
Где h(x) = X*theta, theta является nX1 матрицей и X является m xn матрицей. Я попытался написать так:
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 ответ:
Этот код:
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х1). Примечание. я использовал.^, как указано в вашем сообщении об ошибке. Это мощность каждого элемента, а не мощность матрицы^.

Comments