先比如有数组a=[1 2;2 4;3 6;4 0;5 1;6 0;7 1;8 0]
我想删除第2列有0的行,结果应该是[1 2;2 4;3 6;5 1;7 1]
我写的程序是
clc,clf,clear all
a=[1 2;2 4;3 6;4 0;5 1;6 0;7 1;8 0]
[r,c]=size(a);
for i=1:1:r;
if a(i,2)==0
a(i,:)=[];
end
end
a
但运行出错,求指教!
matlab二维数组删除有零的行
答案:2 悬赏:0 手机版
解决时间 2021-03-01 00:46
- 提问者网友:斑駁影
- 2021-02-28 16:28
最佳答案
- 五星知识达人网友:琴狂剑也妄
- 2021-02-28 17:01
主要原因是循环中a(i,:)=[]; 会动态改变原来的矩阵a, 删掉一行, a的行数就变了
而循环指标i 还以为是原来固定的行数, 导致最后的指标越界报错
不妨这样
clc,clf,clear all
a=[1 2;2 4;3 6;4 0;5 1;6 0;7 1;8 0]
[r,c]=size(a);
index=1:r; %一维矢量, a的行指标
all(a') %将a转置一下, 返回一个矢量,它的每个元素进行判断, a所在行的元素全不为0则是1, 否则为0
a=a(index(all(a')),:) %取出a不含0元素的行,构成新的矩阵
应该能圆满完成任务
而循环指标i 还以为是原来固定的行数, 导致最后的指标越界报错
不妨这样
clc,clf,clear all
a=[1 2;2 4;3 6;4 0;5 1;6 0;7 1;8 0]
[r,c]=size(a);
index=1:r; %一维矢量, a的行指标
all(a') %将a转置一下, 返回一个矢量,它的每个元素进行判断, a所在行的元素全不为0则是1, 否则为0
a=a(index(all(a')),:) %取出a不含0元素的行,构成新的矩阵
应该能圆满完成任务
全部回答
- 1楼网友:上分大魔王
- 2021-02-28 17:15
for i=1:30
if (xxx(i,1)==0)&(xxx(i,2)==0)&(xxx(i,3)==0)&(xxx(i,4)==0)&(xxx(i,5)==0)&(xxx(i,6)==0)
m(i)=i;
end
end
m(m==0)=[];%%把m中的零元素去掉
xxx(m,:)=[]%%m对应的是行,所以直接去掉行即可
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯