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

Matlab: How to write column number into new column if logical condition is met

我在 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 中执行此操作的函数或简单方法?

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

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

find()

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

考虑到下面的注释可以修改如下:

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

具有 sumcumsumfliplr -

的单行解决方案
out = sum(cumsum(fliplr(List),2),2)

另一种方法 max 用于两行解决方案 -

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