2011-05-27 3 views
3

Etant donnée une matrice binaire M de taille nxk, je voudrais créer un vecteur étiquette de taille nx 1 telle que l'entrée de étiquette doit contenir les index de colonne concaténée de M où ses valeurs sontCréation vecteur d'étiquettes en utilisant l'indicateur matrice dans Matlab

pour exemple: Si le M matrice est donnée comme

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

La résultante Étiquette Vector doit être

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

Répondre

4

Voici une façon de le faire de manière compacte et de manière vectorisée.

[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

Vous pouvez utiliser la fonction find ou boucle pour construire les chaînes (remplacement des indices de tableau vide avec '0' après avoir terminé).

2

Voici une solution en utilisant FIND et ACCUMARRAY qui retourne un réseaux de cellules N-par-1 de cordes:

>> [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' 
Questions connexes