[求助]怎样把矩阵中间的某一行删掉呢?
前面happy教授对这个问题给出这样的回答:a =[ 1 2 3 4
0 0 0 7
2 0 2 9
0 0 0 0];
for i=1:4
if sum(a(i,:).^2)==0
a(i,:)=[];
end
end
这个能理解,
但是如果a的全0项如果不是在最后一项(或者要删除的项不是最后一项),如:
a =[ 1 2 3 4
0 0 0 7
0 0 0 0
2 0 2 9
];
for i=1:4
if sum(a(i,:).^2)==0
a(i,:)=[];
end
end
运行后则会:Index exceeds matrix dimensions.
求教这个问题该怎么解决啊。
谢谢了
[ 本帖最后由 lxq 于 2006-10-9 20:00 编辑 ] 因为要解决问题的矩阵很大,
像a(3,:)=[];这样的方法不适用 原帖由 ccchen 于 2006-10-9 10:48 发表
前面happy教授对这个问题给出这样的回答:
a =[ 1 2 3 4
0 0 0 7
2 0 2 9
0 0 0 0];
for i=1:4
if sum(a(i,:).^2)==0
a(i,:)=[];
end
end
这个能理解,
但是如果a的全0项如果不是在最后一项(或者 ...
解决方法应该不少,可以用另外的矩阵把a的非全0行数据记录下来,也可以只记录行索引信息,做完循环后再删除,即:
a =[ 1 2 3 4
0 0 0 7
0 0 0 0
2 0 2 9
];
L = size(a,1);
b = false(L,1);
for i=1:L
if sum(a(i,:).^2)==0
b(i) = true;
end
end
a(b,:)=[]; thanks 原帖由 eight 于 2006-10-9 10:57 发表
解决方法应该不少,可以用另外的矩阵把a的非全0行数据记录下来,也可以只记录行索引信息,做完循环后再删除,即:
a =[ 1 2 3 4
0 0 0 7
0 0 0 0
2 0 2 9
];
L = size(a,1);
b =...
突然想起,其实不必用到循环的(如果矩阵a大小不是太大,应该是不用循环的代码会快,如果很大,自己测试一下两者的速度吧):
a =[ 1 2 3 4
0 0 0 7
0 0 0 0
2 0 2 9
];
b = logical(sum(a.^2,2) == 0);
a(b,:)=[];
a
[ 本帖最后由 eight 于 2006-10-9 21:57 编辑 ] 这句b = logical(sum(a.^2,2) == 0);
可换为any(a,2);
可简单 原帖由 randomatom 于 2006-10-17 00:07 发表
这句b = logical(sum(a.^2,2) == 0);
可换为any(a,2);
可简单
thanks,当时没有仔细考虑sum的问题,呵呵,结合你的意见修改后如下:
a =[ 1 2 3 4
0 0 0 7
0 0 0 0
2 0 2 9
];
b = ~any(a,2);
a(b,:)=[];
a
页:
[1]