3

サイズnxkのバイナリ行列Mが与えられた場合、 LabelのエントリにMの連結された列インデックスが含まれ、その値が1になるように、サイズnx 1のベクトルLabelを作成したいと思います。

例: 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' ]
4

3 に答える 3

4

これは、コンパクトにベクトル化された方法でそれを行う1つの方法です。

[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'
于 2011-05-27T05:46:08.773 に答える
2

N 行 1 列の文字列のセル配列を返すFINDACCUMARRAYを使用したソリューションを次に示します。

>> [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'
于 2011-05-27T06:02:41.143 に答える
1

find関数またはループを使用して文字列を作成できます (終了後に空の配列インデックスを '0' に置き換えます)。

于 2011-05-27T05:36:26.063 に答える