结构数据赋值



我正在尝试计算结构数据类型的距离。

距离法为:

function ssd=distances(x, c)
m=size(x,1);
ssd = zeros(m, k);
k=size(c,1);
for i= 1:k
z = bsxfun(@minus,x, c(i,:));
ssd(:,i) = sqrt(z(:).^2,2);
end

然后我有c,这是一个由以下公式产生的随机数:

for i=1:20
pop(i).Position=unifrnd(2,2,4);
pop(i).dist=distances(x= data,pop(i).Position=c);
end 

x = 数据为 100x2。

问题是当我调用距离方法时,它不接受传递的参数,pop(i).position.

我可以犯的几个错误和建议:

  1. sqrt函数仅接受单个输入参数。 您正在指定两个输入参数。

  2. 您也没有正确计算SSD。 执行z = bsxfun(...);时,只需计算data与输入查询点c(i, :)之间的分量距离。 您还必须对所有分量距离求和。 这可能就是您的sqrt函数调用错误的原因,因为您可能还打算在sqrt之外添加一个sum

    ssd(:, i) = sqrt(sum(z.^2, 2));
    

    顺便说一句,平方差的总和传统上不包括sqrt运算。这就是为什么它被称为平方

  3. 此外,主循环中的这段代码没有任何意义:

    pop(i).dist=distances(x= data,pop(i).Position=c)
    

    我的猜测是,您来自Python背景,您可以在其中将输入指定为键值对。 别这样。 只需做:

    pop(i).dist = distance(data, pop(i).Position);
    
  4. 此代码pop(i).Position=unifrnd(2,2,4);将在 2 和 2 之间的值之间生成一个 4 x 4 矩阵,这没有意义。 您可能希望生成一个4 x 2矩阵以匹配数据具有的要素数量。 使用其他东西并使随机数的范围更大。 若要使其4 x 2指定一个附加参数。 这样的事情可以工作:

    pop(i).Position = unifrnd(2, 10, 4, 2);
    

最新更新