1. 程式人生 > >matlab如何產生不重複的隨機數(轉)

matlab如何產生不重複的隨機數(轉)

猜測樓主想要的是隨機生成不重複的整數吧?如果是浮點數,直接用rand就行,重複的概率極低。

樓上的兩個回答,一個生成的是浮點數,另一個不能保證抽樣的均勻性(從結果可以看到,資料集中在10-30之間)。

生成不重複整數的問題其實是一個不放回隨機抽樣的問題,可以使用下面的這個函式:

function s = sampling(R, n) % 選擇抽樣,R為記錄集合,n為抽取的樣本數 % 演算法參考:D. E. Knuth, TAOCP, vol.2, pp142,稍有改動 % 編寫函式時用的測試資料 if ~nargin R = 1 8; n = 4; end N = length(R);
t = 0;   % 處理過的記錄總數 m = 0;   % 已選得的記錄數 while 1 U  = rand; if (N-t)*U < n-m m = m + 1; s(m) = R(t+1); % 若已抽取到足夠的記錄,則演算法終止 if m >= n, break, end end t = t + 1; end

呼叫例項:

>> sampling(1:100,8) ans = 8    21    24    31    42    85    91    92