运行程序时,似乎出现索引超出范围错误。它似乎发生在第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));