Индекс Matlab вне диапазона - PullRequest
       11

Индекс Matlab вне диапазона

1 голос
/ 30 сентября 2019

Кажется, я получаю индекс из-за ошибки диапазона, когда я запускаю программу. Кажется, это происходит в строке 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;

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Проблема, с которой вы сталкиваетесь, может быть проиллюстрирована следующим образом:

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));
0 голосов
/ 30 сентября 2019

Я думаю, что когда вы делаете это

  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

Если вы удалите вышеуказанный код, он будет работать нормально. Было бы лучше узнать, каковы ваши цели, чтобы предложить альтернативное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...