2013-01-17 45 views
5

Có cách nào dễ dàng để mô phỏng ma trận hoán vị ngẫu nhiên (có kích thước 1000 x 1000) trong Matlab không? Tôi muốn nghiên cứu sự phân bổ giá trị riêng của tổng số độc lập của các ma trận đó.Ma trận hoán vị ngẫu nhiên

Cảm ơn trước!

+1

có một cái nhìn tại địa chỉ: http://stackoverflow.com/questions/13429144/is-there-a-better-way-to-randomly-generate-a-doubly-stochastic-matrix – Shai

Trả lời

9

Bạn có thể tạo một random permutation matrix như vậy:

  1. Tạo một ma trận đoàn kết:

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

    Đối với giá trị lớn N nó là tốt hơn để sử dụng sparse matrices:

    A = speye(N); % create sparse identity matrix 
    
  2. Tạo một hoán vị ngẫu nhiên:

    idx = randperm(1:N); 
    
  3. Sử dụng vector lập chỉ mục để sắp xếp lại các hàng phù hợp

    A = A(idx, :); 
    

Voila!

+3

Ví lớn 'n' nó tốt hơn là sử dụng 'speye' thay vì' mắt' ... không cần phải lưu trữ nhiều số không ... ;-) – Shai

+0

@Shai Tại sao bạn lại xóa câu trả lời? Không có gì sai về nó! –

+1

khi 'speye' được tích hợp vào giải pháp của bạn không cần sao chép ... không có kiến ​​thức bổ sung nào tồn tại ở đó – Shai

1

Trong Matlab (đã sử dụng R2012a) idx = randperm(1:N) cho biết cảnh báo rằng đầu vào phải là vô hướng. Vì vậy: idx = randperm(N);.

Các vấn đề liên quan