2013-01-17 7 views
5

Esiste un modo semplice per simulare una matrice di permutazione casuale (ad esempio della dimensione 1000 per 1000) in Matlab? Vorrei studiare la distribuzione degli autovalori della somma indipendente di tali matrici.Matrice di permutazione casuale

Grazie in anticipo!

+1

dare un'occhiata a: http://stackoverflow.com/questions/13429144/is-there-a-better-way-to-randomly-generate-a-dubly-stochastic-matrix – Shai

risposta

9

È possibile generare un random permutation matrix in questo modo:

  1. Creare una matrice di unità:

    A = eye(N); %// N is the size of your matrix 
    

    per grandi valori di N è meglio usare sparse matrices:

    A = speye(N); % create sparse identity matrix 
    
  2. Genera una permutazione casuale:

    idx = randperm(1:N); 
    
  3. Utilizzare vettoriale indicizzazione per riordinare le righe conseguenza

    A = A(idx, :); 
    

Voila!

+3

Per grande 'N' it è meglio usare 'speye' piuttosto che' eye' ... non è necessario memorizzare così tanti zeri ... ;-) – Shai

+0

@Shai Perché hai rimosso la tua risposta? Non c'era niente di sbagliato in questo! –

+1

una volta che 'speye' è stato integrato nella tua soluzione non c'è bisogno di duplicazioni ... nessuna conoscenza extra esiste lì – Shai

1

In Matlab (utilizzato R2012a) idx = randperm(1:N) fornisce un avviso che l'input deve essere scalare. Quindi: idx = randperm(N);.