结构数据分配

时间:2016-12-15 17:20:33

标签: matlab struct

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

距离法是:

 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 个答案:

答案 0 :(得分:0)

我可以提出一些错误和建议:

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

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

    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);