Matlab 索引超出范围

Matlab index out of range

当我 运行 程序时,我似乎遇到了索引超出范围的错误。它似乎出现在第 19 行并且与 vec2 变量有关。但是,我不明白为什么会这样,因为 vec2 的初始化方式与 vec 相同。任何帮助,将不胜感激。谢谢!!

N = 6;
vec2 = ones(1,N);
vec = ones(1,N) * -1;


for i = 1:N
  num = input('Enter an integer: ');

  if num >= 0
      vec(i) = num;
  else
      vec2(i) = num;
  end

  if sign(vec(i)) == -1
      vec(i) = [];
  end

  if sign(vec2(i)) == 1
      vec2(i) = [];
  end
end

save pos.dat vec -ascii;
save neg.dat vec2 -ascii;

我想当你这样做的时候

  vec(i) = [];

还有这个

  vec2(i) = [];

每次迭代后,索引 i 都会增加,而 vec 或 vec2 会减少。所以在 3 次迭代之后,vec 或 vec2 的长度变为零。 那么顺便说一句,你想用这些代码实现什么。

   if sign(vec(i)) == -1
    vec(i) = [];
   end

   if sign(vec2(i)) == 1
    vec2(i) = [];
   end

如果您删除上面的代码,它将正常工作。最好知道您的目标是什么,以便提出替代解决方案。

您遇到的问题可以说明如下:

vec = [1, 2, 3];% assuming a given vector vec, length = 3
vec(2) = 5; % no problem 
vec = [1, 5, 3];
vec(2) = [];% vec length is 2
vec = [1, 3];
vec(3) = 10; % not allowed 
%% index out of range since the length of vec is 2

备选

  • 而不是首先删除单元格
  • nan
  • 填充它们
  • 然后删除带有 nan
  • 的所有单元格

代码如下

N = 6;
vec2 = ones(1,N);
vec = ones(1,N) * -1;


for i = 1:N
  num = input('Enter an integer: ');

  if num >= 0
      vec(i) = num;
  else
      vec2(i) = num;
  end

  if sign(vec(i)) == -1
      vec(i) = nan;
  end

  if sign(vec2(i)) == 1
      vec2(i) = nan;
  end
end
%% remove nan
vec = vec(~isnan(vec));
vec2 = vec2(~isnan(vec2));