【问题标题】:Attempted to access distanza(2); index out of bounds because numel(distanza)=1 matlab尝试访问 distanza(2);索引超出范围,因为 numel(distanza)=1 matlab
【发布时间】:2014-06-05 12:19:20
【问题描述】:

我正在使用 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)]);

提前致谢!

【问题讨论】:

  • sqrt 行中,您将distanza 计算为单个数字。在下一行中,您尝试访问distanza(i),这会导致i 大于1 的错误。也许只需将第二行更改为dist = [dist; distanza];
  • 我已经尝试过了,但结果它给了我一个数组,最后一个值被写入了 10 次!我不明白出了什么问题...

标签: arrays matlab indexing


【解决方案1】:

让我们看一下代码:

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

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

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

这将在bestidx 中放入f1 的值(即正元素f1 的位置)并在bestidx1 中放入f2 的值

     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 重写为标量(欧几里得距离)。我在这里强调,scalar 与 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;这个对我有用。希望它也对你有用。 :-)

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多