2012-11-06 45 views
10

Tôi có một martix và muốn trộn phần tử của nó.phần tử ma trận trộn trong MATLAB

x=[1 2 5 4 6 ] 

sau khi ngẫu nhiên (một cái gì đó như thế này)

x=[2 4 6 5 1]  

là matlab có chức năng cho nó? trong php array_shuffle thực hiện việc này.

Trả lời

21
  1. có được chỉ số xáo trộn sử dụng randperm

    idx = randperm(length(x)); 
    
  2. chỉ số sử dụng để có được xáo trộn vector

    xperm = x(idx);

3

Là một thay thế để randperm, bạn cũng có thể sử dụng randsample fro m hộp công cụ thống kê.

y = randsample(n,k) trả về một k -by- 1 vector y các giá trị lấy mẫu thống nhất một cách ngẫu nhiên, mà không cần thay thế, từ nguyên 1-n.

Lưu ý rằng đó là "không thay thế" (theo mặc định). Vì vậy, nếu bạn đặt klength(x), nó tương đương với việc trộn ngẫu nhiên của vectơ. Ví dụ:

x = 1:5; 
randsample(x,length(x)) 
%ans = 
%  4  5  3  1  2 

Tôi thích điều này hơn randperm, vì nó dễ dàng mở rộng cho các mục đích sử dụng khác nhau. Ví dụ: để vẽ 3 phần tử từ x một cách ngẫu nhiên (như bản vẽ từ một nhóm có các mục hữu hạn), bạn thực hiện randsample(x,3). Tương tự như vậy, nếu bạn muốn vẽ 3 số, trong đó bảng chữ cái được tạo thành từ các phần tử của x, nhưng cho phép lặp lại, bạn thực hiện randsample(x,3,true).

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