2014-10-31 49 views

Trả lời

8

Tạo số nguyên ngẫu nhiên giữa -3 và 2, nhưng thay thế các số không với 3s:

x = randi([-3,2],4);x(x==0)=3 
4

Bạn có thể sử dụng một cách tiếp cận lặp đi lặp lại để kiểm tra số không và thay thế bằng một bộ nhỏ của các yếu tố ngẫu nhiên trong cùng khoảng thời gian [-3,3]. Chúng tôi tiếp tục làm điều này, cho đến khi không còn số không.

Mã này để đạt được một cách tiếp cận như vậy sẽ giống như thế này -

N = 4; %// datasize 
x1 = randi([-3,3],N); %// the first set/iteration of random numbers 

done = false; %// flag to detect if any zeros are left after iterative substitution 
while ~done %// keep the loop running until no zeros are found 
    x1((x1==0)) = randi([-3,3],numel(find(x1==0)),1); %// substitute zeros with 
               %// smaller set of random numbers 
    done = all(x1(:)~=0); 
end 
+1

đây có phải là đúng? Ý tôi là, các ô xác suất. Các giải pháp của David crates số với xác suất bằng nhau, và sau đó thay đổi một trong "chỉ số" hoặc giá trị. Anh ta không nên có số tiền cao hơn là 3. đúng? Hoặc tôi đang thiếu một cái gì đó? –

+0

@AnderBiguri Yeah cốt truyện thứ hai là một trong những cách tiếp cận của David. – Divakar

+1

Tôi hiểu, nhưng tôi đang cố gắng để hiểu (tôi thực sự hút tại số liệu thống kê) tại sao anh ta có số tiền cao hơn của 3. –

7

@ David cung cấp giải pháp gọn gàng cho vấn đề cụ thể của bạn. Nhưng giải pháp sau đây sẽ làm việc cho bất kỳ tập hợp các số (lưu ý, họ không cần phải là số nguyên), mặc dù tôi đã thiết lập nó cho vấn đề cụ thể của bạn.

OutputSize = [20, 1]; %Size of output matrix 
A = [-3; -2; -1; 1; 2; 3]; %Vector of numbers you want to sample from (can be whatever you want) 
x = A(randi(length(A), OutputSize)); %We randomly select the indices of A 

Bạn có thể muốn biến trên vào một chức năng với đầu vào AOutputDim.

Bạn có thể yếu tố thậm chí lại mẫu của một mảng di động sử dụng phương pháp này ...

EDIT: điều chỉnh mã để cho phép mảng đầu ra của bất kỳ kích thước sau đề nghị của @Divakar trong các ý kiến ​​

+1

Cách tiếp cận khá thông minh! Và dường như được phân phối đồng đều! 1 cho một công việc tuyệt vời! – Divakar

+1

Cũng vì OP đang tìm kiếm một mảng 'N x N', tại sao không sử dụng' [N N] 'thay thế? – Divakar

+0

@Divakar Cảm ơn và đề xuất tốt. Tôi đã tiến thêm một bước và cho phép người dùng chỉ định một mảng đầu ra có kích thước bất kỳ. –

2

có lẽ không phải là giải pháp nhanh nhất, nhưng có một chức năng randsample trong kê Toolbox rằng không chỉ rằng:

m = 4; %// number of rows 
n = 4; %// number of columns 
values = [-3:-1, 1:3]; %// values to sample from 
x = reshape(randsample(values, m*n, true), [m n]); 
Các vấn đề liên quan