matlab如何產生不重複的隨機數(轉)
阿新 • • 發佈:2019-01-03
猜測樓主想要的是隨機生成不重複的整數吧?如果是浮點數,直接用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
|