我期望做的是產生長度爲k的n個向量,使得向量中的每個值都是一個隨機數,並且不管每個向量中整數的順序如何,都不存在重複的向量。例如,不會有矢量1,2,3和2,1,3。隨機向量無論順序
到目前爲止,我有以下內容來生成一個向量,並且我計劃通過此代碼循環來生成n個向量。
vector<- sample(1:20000,k)
我有一個想法是將所有向量按升序排序,然後刪除重複的向量。有沒有更簡單/更有效的方法?
謝謝!
我期望做的是產生長度爲k的n個向量,使得向量中的每個值都是一個隨機數,並且不管每個向量中整數的順序如何,都不存在重複的向量。例如,不會有矢量1,2,3和2,1,3。隨機向量無論順序
到目前爲止,我有以下內容來生成一個向量,並且我計劃通過此代碼循環來生成n個向量。
vector<- sample(1:20000,k)
我有一個想法是將所有向量按升序排序,然後刪除重複的向量。有沒有更簡單/更有效的方法?
謝謝!
一種方法是生成所有可能的組合,然後從該組中選擇。這將保證沒有重複:
> tmp <- combn(100, 3)
> dim(tmp)
[1] 3 161700
> tmp[ , sample(ncol(tmp), 10) ]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 34 35 28 3 3 29 8 24 50 53
[2,] 54 54 63 57 17 86 31 30 52 81
[3,] 97 79 87 92 53 94 90 83 87 97
當然這隻會工作,如果組合的總數可以適應內存。雖然有方法遍歷組合,只保留一些,或者生成一個整數樣本,然後將它們轉換爲適當的組合。
如果您想要的樣本數量相對於可能的組合數量較小,那麼拒絕方法可能會更有效。但是,如果樣本數量相對於導致大量重複的組合數量較大,則這可能會更好。
樣本數量相對較小:例如100,組合數量很大(從20 000取樣100的方法數量)。然後,我也想將樣本數量從1改變爲100,所以這可能是具有挑戰性的。 – user2379487
小問題:'k'有多大? (可能會有性能影響。) – joran
大。在10 000或更大的秩序 – user2379487
我認爲你的計劃是好的。 – eddi