使用Matlab中的指标矩阵创建标签向量

时间:2011-05-27 05:21:12

标签: matlab matrix matrix-indexing

给定大小 nxk 的二进制矩阵 M ,我想创建一个大小为 nx 1的标签 strong>这样标签的输入应包含 M 的连续列索引,其值 1

例如:如果 M 矩阵为

M = [ 0 0 1 1  
      0 0 0 1  
      1 0 0 1
      0 0 0 0
      1 1 1 0 ]

结果标签向量应为

 V = [ '34'  
        '4'  
       '14'  
        '0'
      '123' ]

3 个答案:

答案 0 :(得分:4)

这是一种以矢量化的方式紧凑地完成它的方法。

[nRows,nCols]=size(M);
colIndex=sprintf('%u',0:nCols);

V=arrayfun(@(x)colIndex(logical([~any(M(x,:)) M(x,:)])),1:nRows,'UniformOutput',false)

V = 

    '34'    '4'    '14'    '0'    '123'

答案 1 :(得分:2)

这是一个使用FINDACCUMARRAY的解决方案,它返回一个N-by-1单元格的字符串数组:

>> [r,c] = find(M);  %# Find the row and column indices of the ones
>> V = accumarray(r,c,[],@(x) {char(sort(x)+48).'});  %'# Accumulate and convert
                                                       %#   to characters
>> V(cellfun('isempty',V)) = {'0'}  %# Fill empty cells with zeroes

V = 

    '34'
    '4'
    '14'
    '0'
    '123'

答案 2 :(得分:1)

您可以使用find函数或循环来构建字符串(在完成后将空数组索引替换为'0'。