我有以下代码用于计算高斯函数的线性组合的结果。我真正想做的是以某种方式对其进行矢量化,以便它在 Matlab 中的性能更高。
请注意,y 是列向量(输出),x 是矩阵,其中每一列对应一个数据点,每一行对应一个维度(即 2 行 = 2D),方差是双精度数,高斯是一个矩阵,其中每一列是对应于高斯平均点的向量,权重是每个高斯前面的权重的行向量。请注意,权重的长度比高斯大 1,因为 weights(1) 是 0 阶权重。
function [ y ] = CalcPrediction( gaussians, variance, weights, x )
basisFunctions = size(gaussians, 2);
xvalues = size(x, 2);
if length(weights) ~= basisFunctions + 1
ME = MException('TRAIN:CALC', 'The number of weights should be equal to the number of basis functions plus one');
throw(ME);
end
y = weights(1) * ones(xvalues, 1);
for xIdx = 1:xvalues
for i = 1:basisFunctions
diff = x(:, xIdx) - gaussians(:, i);
y(xIdx) = y(xIdx) + weights(i+1) * exp(-(diff')*diff/(2*variance));
end
end
end
您可以看到,目前我只是遍历 x 向量,然后遍历 2 for 循环中的高斯。我希望这可以改进 - 我看过 meshgrid 但这似乎只适用于向量(而且我有矩阵)
谢谢。