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

Matlab:如果满足逻辑条件,如何将列号写入新列,matlab,multiple-columns,logical-operators,Matlab,Multiple Columns,Logical Operators,我在matlab中有一个这样的示例矩阵(尽管我的实矩阵包含更多列) 我试图找到的是一种方法,可以将条件TRUE(=1)总结为一个新变量,该变量只有一列,但表示结构中的列号,如下面的列表 ListNew = 3 1 2 2 0 在matlab中有函数或简单的方法来实现这一点吗?如果矩阵只有0s和1s,并且每行只有一个1,那么您可以这样做 List = List .* repmat(1:size(List,2),size(List,1),1);

我在matlab中有一个这样的示例矩阵(尽管我的实矩阵包含更多列)

我试图找到的是一种方法,可以将条件TRUE(=1)总结为一个新变量,该变量只有一列,但表示结构中的列号,如下面的列表

ListNew =

     3
     1
     2
     2
     0 

在matlab中有函数或简单的方法来实现这一点吗?

如果矩阵只有
0
s和
1
s,并且每行只有一个
1
,那么您可以这样做

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

使用
find()

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

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

带有
sum
cumsum
fliplr
-

out = sum(cumsum(fliplr(List),2),2)
另一种方法是使用
max
实现两行解决方案-

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

这是一个很好的解决方案,谢谢。然而,我也有一些不包含任何真实条件(全零)的行,比如在这个矩阵
列表=[0,0,1;1,0,0;0,1,0;0,1,0;0,1,0,0]
(很抱歉,我在我的操作中没有提到这一点,但编辑了它)。如果我将您的代码用于这个新矩阵,0行将丢失。那么,您可以在一行中有多个吗?如果是这样,输出会是什么样的?不,它只能包含一个真条件,或者不包含任何真条件。如果指定了1,则应写出列名,如果整行包含0,则应在新列中放置零
out = sum(cumsum(fliplr(List),2),2)
[idx,valid] = max(List,[],2)
out = idx.*valid