Shiftare vettore binario a sinistra in matlab

di il
1 risposte

Shiftare vettore binario a sinistra in matlab

Salve ragazzi, avrei bisogno di una mano con matlab.

Praticamente devo shiftare a sinistra un vettore binario in modo da ottenere il massimo numero di zeri all'inizio del vettore.

Un esempio pratico
A = [ 1 0 0 1 1 0 1 1 ] ;
Tramite il comando
A = A([2:end 1]); 
posso effettuare velocemente lo shift a sinistra di un bit, il problema è verificare quando il mio numero binario ha raggiunto il massimo numero di zeri a sinistra, ovvero quando ho ottenuto questo vettore per il nostro esempio
 A = [ 0 0 1 1 0 1 1 1]
Purtroppo non mi viene in mente una soluzione semplice e soprattutto veloce da un punto di vista computazionale

In attesa di una risposta, vi ringrazio in anticipo.
Saluti, Luca

1 Risposte

  • Re: Shiftare vettore binario a sinistra in matlab

    Sono riuscito a trovare una soluzione Come un idiota non avevo pensato che il massimo numero di zeri a sinistra corrispondeva al numero più piccolo convertito il decimale. Quindi incollo la mia soluzione nel caso in cui serva a qualcuno.

    Ci tengo a specificare che il mio input non era un singolo vettore binario ma una matrice di numeri binari così realizzata
    
    A = [1 1 0 0 1 0 0 1; 1 0 1 0 1 1 0 0 ; 0 0 0 0 0 0 0 0 ; 1 0 0 0 0 1 0 1]
    
    e così via per una dimensione totale di 774x8

    quindi la soluzione è stata scritta per una matrice a voi
    function matriceRuotata =  shift2maxzerosleft(matriceBinaria)
    %Prende in input un matrice Binaria
    %Ruota la matrice binaria in modo da ottenere il massimo numero di zeri a
    %sinistra.
    %Restituisce la matrite ruotata
    
    [xsize,ysize] = size(matriceBinaria);
    for i=1:1:xsize
        A1 = matriceBinaria(i,1:8);
        Atemp = A1;
        x = num2str(A1);
        x(isspace(x)) = '';
        y = bin2dec(x);
        mintemp = y;
        for j=1:1:8
            A1 = A1([2:end 1]);
            x2 = num2str(A1);
            x2(isspace(x2)) = '';
            y2 = bin2dec(x2);
            if( y2 < mintemp )
                mintemp = y2;
                Atemp = A1;
            end
        end
        if i == 1
            matriceRuotata = Atemp;
        else
            matriceRuotata = [matriceRuotata;Atemp];
        end
    end
Devi accedere o registrarti per scrivere nel forum
1 risposte