我在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中有没有功能或简单的方法?
答案 0 :(得分:4)
find()
[ListNew,~] = find(List');
考虑到下面的评论,可以修改如下:
ListNew=zeros(5,1);
[Col,Row] = find(List');
ListNew(Rows)=Col;
答案 1 :(得分:3)
如果您的矩阵仅为0
和1
s,并且每行只有一个1
,那么您可以执行此操作,
List = List .* repmat(1:size(List,2),size(List,1),1);
sum(List,2)
ans =
3
1
2
2
3
答案 2 :(得分:1)
sum
,cumsum
& fliplr
-
out = sum(cumsum(fliplr(List),2),2)
使用max
进行双线解决方案的另一种方法 -
[idx,valid] = max(List,[],2)
out = idx.*valid