matlab 删除行或列时出现:矩阵索引超出删除范围 问题的解决和新思路

删除某些行或者某些列

有时候我们需要将读取的.xlsx文件中的某些列或者某些行进行删除,比如存在以下的数据,需要删除第一列相同的前i-1行元素,如下面的第3行。在这里插入图片描述

原程序

A=xlsread('shunxu_data.xlsx');
K = A(:,1);
num = length(A)
for i = 1:num-1
   if K(i) == K(i+1) 
       A(i,:) = [];
   end
end
xlswrite('new.xlsx',A,'A:G');

但是这样处理的话会报错:
在这里插入图片描述
但是显示A(i,:)的话并无任何问题。

经过反复研究,得到问题的原因是:每循环一次,就会删除了一行,这样新的i与原来的i就不一样,也就是存在多组需要删除的数据的话,A(i,:) = [];会导致需要索引的i>仅存的长度。
比如:共有100行,需要删行i=71的数据,在删除了第30行之后,总的数据就只有70行,要删除71行的数据,就无法索引,即“矩阵索引超出删除范围”。

解决方法1

可以设定一个新的矩阵,将符合要求的数据写入新的矩阵,既避免了删除数据的问题,而且写操作也快与删操作。

解决方法2

为了防止在删除i遍历时与i有关的数据会出现的问题,我们可以统一操作,将需要删除的数据全部改写为新数据,比如[1 1 1 1 1 1],这样删除[1 1 1 1 1 1]的数据就不会收到变量i 的影响,就不会存在超出索引范围的问题。

最后的程序

A=xlsread('shunxu_data.xlsx');
K = A(:,1);
num = length(A)
t=1;
for i = 1:num-1
   if K(i) == K(i+1) %直接删除会导致A(i,:)会超出索引范围
       A(i,:) = [1 1 1 1 1 1 1];
   end
   if A(i,:) ~= [1 1 1 1 1 1 1]
        data(t,:)=A(i,:)
        t = t+1;
   end   
end
xlswrite('newRGB50_200.xlsx',data);
  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值