Octave 中的 'index out of bounds' 错误是什么?

What is 'index out of bounds' error in Octave?

我一直在 Octave 中过滤数据但出现错误

index out of bounds: value 741 out of bound 740'

X = 892x2 矩阵,第 2 列包含一些值 = 0。我希望删除所有值为 0 的行。

这是我的代码

train_set = csvread('train.csv');
X = [train_set(:,3),train_set(:,7)];
y = train_set(:,2);
m = size(X,1);
for i=1:m,
  if train_set(i,7) == 0,
    X(i,:)=[];
  endif
end

您正在循环中修改 X。这意味着虽然最初它有 892 行,但在第一个零之后,您将其减少到 891 行,然后减少到 890 行,等等。

有时您已将其减少到 740 行;在那之后的某个时候,循环中的 i 达到数字 741.

这会导致以下类型的指令:X(741, :) = []

Octave 尽职尽责地告诉您 X 不再有第 741 行。

相反,您可以做的是标记要删除的行,并在循环后使用单个命令将其删除。或者更好的是,没有 foor 循环,你可以这样做:

Condition = train_set(:,7) == 0;   % find all rows you want to delete
X( Condition, : ) = [];   % Use logical indexing on rows to delete them.