great_kevin 发表于 2008-12-22 17:20:43

删除行出错(在线等)

b=a;
for i=1:56
      if a(i,3)<=40.0
            b(i,:)=[];
      end
end
我想把一个矩阵的第三列的所有小于40的数据所在的行删除掉,为什么老出错呢?
假设a是个56行的矩阵

great_kevin 发表于 2008-12-22 17:21:13

b=a;
for i=1:56
      if a(i,3)<=40.0
            b(i,=[];
      end
end

great_kevin 发表于 2008-12-22 17:22:20

第一次发的显示表情的那个是冒号,表示整行赋值为空【】,不知道为什么成了表情,呵呵,不好意思

rocwoods 发表于 2008-12-22 17:39:37

从你删除第一个行开始,原矩阵的行数就小于56了,当然出错。
实际不需要循环,逻辑索引即可
b(b(:,3)<40,:) = [];

great_kevin 发表于 2008-12-22 17:52:22

我考虑到了这一点,所以我用b=a

我考虑到了这一点,所以我用b=a,这样,我在a中找到位置,而卧删除的则是b中的数据,为什么会出错呢?

bainhome 发表于 2008-12-22 18:20:57

rocwoods说得再清楚不过了吧。
例如循环到第50次,a(50,3)<=40,但b早就删得连行总数都不到50,不报错才鬼。
ps:rocwoods给出的方法是删行的王道,跟这个相比,用你的思路使MATLAB,基本上等同于拿AK47当铁锨用了。:victory:

great_kevin 发表于 2008-12-22 19:13:15

呵呵,知错了,谢谢指教

我只考虑a了,忘了b仍然有同样的问题,不仅走了弯路,还没有解决问题,rocwoods的一行代码就解决了问题,以后一定向大家多学学。
谢谢各位!
页: [1]
查看完整版本: 删除行出错(在线等)