2013-01-17 18 views
5

Czy istnieje prosty sposób symulacji losowej macierzy permutacji (powiedzmy o wielkości 1000 na 1000) w Matlab? Chciałbym zbadać rozkład wartości własnych niezależnej sumy takich macierzy.Macierz permutacji losowej

Z góry dziękuję!

+1

zajrzyj na: http://stackoverflow.com/questions/13429144/is-there-a-better-way-to-andandlyly-gen--doubly-stochastic-matrix – Shai

Odpowiedz

9

Można wygenerować random permutation matrix tak:

  1. Tworzenie macierzy jedność:

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

    dla dużych wartościach N lepiej jest użyć sparse matrices:

    A = speye(N); % create sparse identity matrix 
    
  2. Generowanie losowej permutacji:

    idx = randperm(1:N); 
    
  3. Zastosowanie wektora indeksowanie aby zmienić kolejność wierszy odpowiednio

    A = A(idx, :); 
    

Voila!

+3

Dla dużych 'N' to lepiej używać 'speye' niż' eye' ... nie trzeba przechowywać tak wielu zer ... ;-) – Shai

+0

@Shai Dlaczego usunąłeś swoją odpowiedź? Nie było w tym nic złego! –

+1

Po włączeniu 'speye' do twojego rozwiązania nie ma potrzeby duplikacji ... nie ma tam dodatkowej wiedzy – Shai

1

W programie Matlab (używany R2012a) idx = randperm(1:N) wyświetla ostrzeżenie, że dane wejściowe powinny być skalarne. A więc: idx = randperm(N);.