Scegliere un elemento di un vettore in modo random

di il
1 risposte

Scegliere un elemento di un vettore in modo random

Salve ragazzi,
mi serve un aiutino a chi riesce a capirci un pò
In Matlab, io ho un vettore dato con questi valori, ad es.:
v=[0 2 3 4 0 0 0 0 0 0 11]

da questo vettore io vorrei scegliere a caso, in modo random, uno tra i suoi elementi che non sia 0; o in poche parole, per il vettore v dato, con stessa probabilità vorrei che una funzione scelga in modo equiprobabile uno dei suoi numeri non nulli (cioè 2 oppure 3, o 4, o 11);
Ho provato con unifrnd(0,11), ma non sò come usarlo nel ciclo.
P.S.: il vettore v che avrò durante lo svolgimento del programma, sarà sempre fatto di 11 elementi, ma i valori degli elementi saranno ogni volta diversi, per cui non avrò sempre valori diversi da 0 nelle stesse posizioni, come nel vettore v che ho dato di esempio.
(ad es. il prossimo vettore v dato potrebbe essere: v=[1 0 0 4 0 0 7 8 0 0 0])

Per cui mi sevirebbe un ciclo che per ogni vettore v dato, mi butti un numero random a caso, e scelga uno degli elementi di v, che non sia nullo.

Qualche idea?

1 Risposte

  • Re: Scegliere un elemento di un vettore in modo random

    Ragazzi, ho già risolto da solo.
    Certo non sò se questo è il modo più elegante, o ne esiste un altro migliore, cmq per divulgare il metodo vi posto il ciclo che ho fatto, così che possa essere di aiuto a qualcun altro se ne avesse bisogno:
    %il vettore dato è action_possible di 11 alementi; associo adesso le variabili actx
    %ad ogni suo elemento,poi farò l'estrazione random su questi:

    act1=action_possible(1,1); act2=action_possible(1,2);
    act3=action_possible(1,3); act4=action_possible(1,4);
    act5=action_possible(1,5); act6=action_possible(1,6);
    act7=action_possible(1,7); act8=action_possible(1,8);
    act9=action_possible(1,9); act10=action_possible(1,10);
    act11=action_possible(1,11);
    %pongo la variabile 'estratto' come numero random, e poi valuto se è uguale ad uno degli elementi %di action_possible', e se è uguale a 0:
    estratto=ceil(unifrnd(0,11)); %estrazione radom
    while (estratto~=act1 & estratto~=act2 & estratto~=act3 & estratto~=act4 & estratto~=act5 & estratto~=act6 & estratto~=act7 & estratto~=act8 & estratto~=act9 & estratto~=act10 & estratto~=act11 | estratto==0)
    fprintf('estratto è un valore uguale a zero, quindi riestraggo')
    estratto=ceil(unifrnd(0,11));
    end
    fprintf('estratto è un numero non nullo del vettore dato')
Devi accedere o registrarti per scrivere nel forum
1 risposte