MATLAB中,对于矩阵,如何去掉所有全为0的列 形成新的矩阵
3个回答
展开全部
你好,很简单
for i= 列数:-1:1
b = uniqe(a(:,i))
if mean(b) == 0
a(:,i) =[]
end
end
当然这个只是去除列。
如果还有其他要求,可以参考find,
Y= (G(find(G~=0)));
____________
你好,我是第一个回答问题的。因为百度楼层问题,修改回答就会显示是在后面回答的。我把我的答案补充放到了黑线以后。
lotuskakaka 的回答看起来很简洁,但是确是不对的。
A(:,find(sum(A,1)==0))=[];
这个语句实际上是找到每一行所有数和为零的,然后去掉这行
如
A =
-1 -1 1
1 0 0
运行完后
>> A(:,find(sum(A,1)==0))=[]
A =
-1 1
0 0
把本来不是0的都给去掉了!
正确的做法应该是:
A(:,find(std(A,1)==0))=[]
标准偏差为0的才应该全是0
——————
我个人的观点是,要看是什么类型的回答。 有的回答和先来后到是没关系的,但是有的是有的,这个要楼主自己来判断的。 这个不是急功近利问题,而是对于这个回答系统的一种意见。回答的先后顺序可以作为判断每个人对这个问题答案的真实贡献的一种依据,因为有的问题只要有一个人回答了,后面的人都可以参考。
就和你说的一样,小bug人人有。作为前面回答的更容易有小bug,但是有的时候就是一个小bug决定一个问题的结果正确与否。
这种事情发生在我身上很多次了。 举个例子:有人问一款老游戏,我说是A的1代或者2代。 后面跑出来一个人说,是A的2代。后面的人就得到了采纳。 但是后面回答的就没有技术含量了,因为幼儿园小孩都可以在1代和2代中二选一。 就比如说你这个bug的例子,这个确实是有bug,思路是好的,结果是错的。我改正了这个bug,对提出问题的人来说是好的。 提出楼层问题也是给楼主一个参考。 急功近利的话就不用把以前发过的所有内容保留在黑线前了,我直接放A(:,find(sum(abs(A),1)==0))=[];在你的回答后,清空以前的回答内容。这样就连一个改错的机会都没给你留下了,这种才是流氓到了极点。(百度系统问题,你改错了,因为时间关系,反而成了我的重复答案。你不改错,缺是不对的。所以我每次添加,改错,都放到黑线后,强调时间性,也希望百度早点改良系统。)
for i= 列数:-1:1
b = uniqe(a(:,i))
if mean(b) == 0
a(:,i) =[]
end
end
当然这个只是去除列。
如果还有其他要求,可以参考find,
Y= (G(find(G~=0)));
____________
你好,我是第一个回答问题的。因为百度楼层问题,修改回答就会显示是在后面回答的。我把我的答案补充放到了黑线以后。
lotuskakaka 的回答看起来很简洁,但是确是不对的。
A(:,find(sum(A,1)==0))=[];
这个语句实际上是找到每一行所有数和为零的,然后去掉这行
如
A =
-1 -1 1
1 0 0
运行完后
>> A(:,find(sum(A,1)==0))=[]
A =
-1 1
0 0
把本来不是0的都给去掉了!
正确的做法应该是:
A(:,find(std(A,1)==0))=[]
标准偏差为0的才应该全是0
——————
我个人的观点是,要看是什么类型的回答。 有的回答和先来后到是没关系的,但是有的是有的,这个要楼主自己来判断的。 这个不是急功近利问题,而是对于这个回答系统的一种意见。回答的先后顺序可以作为判断每个人对这个问题答案的真实贡献的一种依据,因为有的问题只要有一个人回答了,后面的人都可以参考。
就和你说的一样,小bug人人有。作为前面回答的更容易有小bug,但是有的时候就是一个小bug决定一个问题的结果正确与否。
这种事情发生在我身上很多次了。 举个例子:有人问一款老游戏,我说是A的1代或者2代。 后面跑出来一个人说,是A的2代。后面的人就得到了采纳。 但是后面回答的就没有技术含量了,因为幼儿园小孩都可以在1代和2代中二选一。 就比如说你这个bug的例子,这个确实是有bug,思路是好的,结果是错的。我改正了这个bug,对提出问题的人来说是好的。 提出楼层问题也是给楼主一个参考。 急功近利的话就不用把以前发过的所有内容保留在黑线前了,我直接放A(:,find(sum(abs(A),1)==0))=[];在你的回答后,清空以前的回答内容。这样就连一个改错的机会都没给你留下了,这种才是流氓到了极点。(百度系统问题,你改错了,因为时间关系,反而成了我的重复答案。你不改错,缺是不对的。所以我每次添加,改错,都放到黑线后,强调时间性,也希望百度早点改良系统。)
上海华然企业咨询
2024-10-28 广告
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步...
点击进入详情页
本回答由上海华然企业咨询提供
展开全部
matlab提供了很好的集成模块,上面的方法太麻烦!那是c语言的思想。
最最简单和便捷的方法:
设矩阵A
A(:,find(sum(abs(A),1)==0))=[];
搞定! 哈哈。。。WindEnchanter童鞋提出的很好,小bug人人都有,改之。
不过WindEnchanter童鞋不用那么急功近利,谁的答案好就是好,和先来后到没啥关系。话说可以用最简单的方法解决,就别整看似高深的标准偏差std,用abs完全可以,不行咱还有logical。。。很多很多简单实用的东西。
博士嘛,要学会把复杂的东西简单化。
最最简单和便捷的方法:
设矩阵A
A(:,find(sum(abs(A),1)==0))=[];
搞定! 哈哈。。。WindEnchanter童鞋提出的很好,小bug人人都有,改之。
不过WindEnchanter童鞋不用那么急功近利,谁的答案好就是好,和先来后到没啥关系。话说可以用最简单的方法解决,就别整看似高深的标准偏差std,用abs完全可以,不行咱还有logical。。。很多很多简单实用的东西。
博士嘛,要学会把复杂的东西简单化。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
另一种思路:
a = [0 1 4 0 5; 0 2 5 0 8; 0 7 6 0 1];
N = size(a);
i = 1;
while (i < N(2)) % N(2)是矩阵a的列数
tmp = a(:, i);
if tmp == zeros(size(tmp))
a(:, i) = []; % 删除全部为0的一列
N = size(a); % 更新N(2)
else
i = i + 1; % 下一列
end
end
不知这样是否更易理解。
a = [0 1 4 0 5; 0 2 5 0 8; 0 7 6 0 1];
N = size(a);
i = 1;
while (i < N(2)) % N(2)是矩阵a的列数
tmp = a(:, i);
if tmp == zeros(size(tmp))
a(:, i) = []; % 删除全部为0的一列
N = size(a); % 更新N(2)
else
i = i + 1; % 下一列
end
end
不知这样是否更易理解。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询