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));
当我 运行 程序时,我似乎遇到了索引超出范围的错误。它似乎出现在第 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));