【发布时间】:2015-07-30 17:46:49
【问题描述】:
我知道当大多数或所有内容都被矢量化时,MATLAB 会更好地工作。我有两组向量 X 和 T。对于我要计算的 X 中的每个向量 x:
这是因为我想计算:
这可以很容易地表示为 MATLAB 线性代数运算,正如我在上面用点积写的那样。我希望我可以通过拥有这些向量来加快速度,而不是用 for 循环计算每个 f(x)。理想情况下,我可以将其全部矢量化并计算:
我已经考虑这个问题有一段时间了,但如果一个函数接受两个向量并计算每个向量之间的范数,这似乎不是一个好方法,而我不必显式编写for 循环。
即我已经实现了简单的代码:
function [ f ] = f_start( x, c, t )
% Computes f^*(x) = sum_i c_i exp( - || x_i - t_i ||^2)
% Inputs:
% x = data point (D x 1)
% c = weights (K x 1)
% t = centers (D x K)
% Outputs:
% f = f^*(x) = sum_k c_k exp( - || x - t_k ||^2)
[~, K] = size(t);
f = 0;
for k=1:K
c_k = c(k);
t_k = t(:, k);
norm_squared = norm(x - t_k, 2)^2;
f = f + c_k * exp( -1 * norm_squared );
end
end
但我希望有一种不那么天真的方法来做到这一点!
【问题讨论】:
标签: matlab optimization vector