试图访问distanza(2);索引越界因为numel(distanza)= 1 matlab

时间:2014-06-05 12:19:21

标签: arrays matlab indexing

我正在使用matlab处理一个项目,而且我在这部分代码中遇到了问题。

在最后的for循环中,我无法创建一个数组,用于存储' distanza' .....作为输出程序覆盖找到的最后一个值的数组,或者它表示数组只有一个值。 我需要这些值,然后制作媒体。

  C(f2)= numel (featPairs);
  C1(f1)= numel (featPairs);

 [bestval,bestidx] = max (C);
 [bestval1,bestidx1] = max (C1);

 a = importdata('coordData.mat'); 

    x = interp1( a(:,1), a(:,2),  1:frames2);
    y = interp1( a(:,1), a(:,3),  1:frames2);

 b = importdata('coordData2.mat'); 

    x1 = interp1( b(:,1), b(:,2),  1:frames1);
    y1 = interp1( b(:,1), b(:,3),  1:frames1);

distanza=[];
dist= [];

if max(C)==bestval

disp ([x(bestidx),y(bestidx)]);
disp ([x1(bestidx1),y1(bestidx1) ]);

for i=1:10 

distanza  = sqrt ((x(bestidx)-x1(bestidx1))^2 + (y(bestidx)-y1(bestidx1))^2);
dist = [dist; distanza(i)];

end

 save ('distance_sample.mat','dist');
 disp (['la distanza tra le due posizioni è: ', num2str(distanza)]);

提前感谢!

1 个答案:

答案 0 :(得分:0)

让我们走过代码:

      C(f2)= numel (featPairs);
      C1(f1)= numel (featPairs);

假设featPairs存在且CC1不存在,您只需创建一个零向量,它将在两个不同的位置覆盖相同(正)值f1f2

     [bestval,bestidx] = max (C);
     [bestval1,bestidx1] = max (C1);

这将bestidx f1的值(即正元素f1的位置)和bestidx1 f2的值{ / p>

     a = importdata('coordData.mat'); 

        x = interp1( a(:,1), a(:,2),  1:frames2);
        y = interp1( a(:,1), a(:,3),  1:frames2);

     b = importdata('coordData2.mat'); 

        x1 = interp1( b(:,1), b(:,2),  1:frames1);
        y1 = interp1( b(:,1), b(:,3),  1:frames1);

好的,你加载并切片并处理一些数据。

    distanza=[];
    dist= [];

您创建/清除distanzadist为空矩阵。

    if max(C)==bestval

这将永远是真实的;请查看您如何定义bestval。最好删除它,它没有用处。

    disp ([x(bestidx),y(bestidx)]);
    disp ([x1(bestidx1),y1(bestidx1) ]);

好的,还有一些展示。

    for i=1:10 

对于从1到10的每个i ......

    distanza  = sqrt ((x(bestidx)-x1(bestidx1))^2 + (y(bestidx)-y1(bestidx1))^2);

...将distanza重写为标量(欧氏距离)。我在这里强调,标量与1x1矩阵一样。现在,因为右侧不依赖于i,它会一遍又一遍地计算相同的值,并且我强调相同的值

    dist = [dist; distanza(i)];

...附加在dist标量i的第distanza个元素的右侧。现在,当i为1时,这是可以的,但对于其余的值,您将超出界限(错误)。

    end

... for循环结束。

     save ('distance_sample.mat','dist');
     disp (['la distanza tra le due posizioni è: ', num2str(distanza)]);

更多保存和显示。

在我看来,你应该首先向自己说明你想要计算什么,因为代码似乎有点混乱。现在,尝试rubberducking;这个对我有用。希望它也适合你。 : - )