Matlab:如果满足逻辑条件,如何将列号写入新列

时间:2015-04-27 11:50:34

标签: matlab multiple-columns logical-operators

我在matlab中有一个这样的样本矩阵(虽然我的真实矩阵包含更多列)

List = [0,0,1;1,0,0;0,1,0;0,1,0;0,0,0]

List =

     0     0     1
     1     0     0
     0     1     0
     0     1     0
     0     0     0

我想要找到的是一种如何将TRUE(= 1)的条件汇总到只有一列的新变量中的方法,但这表示结构中的列号如下列表

ListNew =

     3
     1
     2
     2
     0 

在matlab中有没有功能或简单的方法?

3 个答案:

答案 0 :(得分:4)

find()

有一种更简单的方法
[ListNew,~] = find(List');

考虑到下面的评论,可以修改如下:

ListNew=zeros(5,1);
[Col,Row] = find(List');
ListNew(Rows)=Col;

答案 1 :(得分:3)

如果您的矩阵仅为01 s,并且每行只有一个1,那么您可以执行此操作,

List = List .* repmat(1:size(List,2),size(List,1),1);
sum(List,2)
ans =
     3
     1
     2
     2
     3

答案 2 :(得分:1)

sumcumsum& fliplr -

out = sum(cumsum(fliplr(List),2),2)

使用max进行双线解决方案的另一种方法 -

[idx,valid] = max(List,[],2)
out = idx.*valid