-4

重複の可能性:
遺伝子のリストをランダムにサンプリング

19.000個の遺伝子の宇宙から1652個の遺伝子の1000個のランダムリストを作成したいと思います。宇宙はそれほど大きくないので、交換することにしました。唯一の条件は、リストに類似の遺伝子を含めることができるということです(置換のため)が、各リストに遺伝子を複数回含めることはできません。したがって、単一のリストで一意になります。これについて何か提案はありますか?

例:宇宙=文字[1:26]

必要な出力:

 [[1]]  [[2]]   [[3]]   [[...]]
   a      b       f
   b      c       a
   c      d       b
   f      z       j
   h      j       o

次のような状況は避けたいと思います。

 [[1]]  [[...]]
  a   
  a   
  b   
  c
  c

ユニバースはそれほど大きくないため、REPLACE =Fを設定できません。REPLACE=Tを設定すると、複製された要素がリストに表示されます...これは、分析で避けようとしていることです。

前もって感謝します

E。

4

2 に答える 2

4

このコードは、置き換えなしで、ユニバースから10個のサンプルを5個抽出します。私はこれがあなたが望むものだと思います:

Universe = letters[1:26]
replicate(5, sample(Universe, 10, replace = FALSE))

     [,1] [,2] [,3] [,4] [,5]
 [1,] "j"  "l"  "k"  "c"  "j" 
 [2,] "g"  "i"  "c"  "t"  "g" 
 [3,] "z"  "u"  "m"  "u"  "e" 
 [4,] "a"  "b"  "t"  "e"  "q" 
 [5,] "q"  "d"  "j"  "k"  "m" 
 [6,] "r"  "a"  "l"  "l"  "x" 
 [7,] "e"  "g"  "r"  "i"  "f" 
 [8,] "l"  "w"  "o"  "g"  "u" 
 [9,] "b"  "y"  "b"  "x"  "c" 
[10,] "u"  "j"  "x"  "a"  "b" 
于 2012-10-06T11:29:01.923 に答える
3

「REPLACE=T」の意味はわかりませんが、random.sampleが希望どおりに機能する可能性があります

>>> import random
>>> import string
>>> universe = string.ascii_lowercase
>>> random.sample(universe, 5)
['z', 'n', 'p', 'u', 's']

数字を宇宙として使う

>>> universe = range(19000)
>>> result = [random.sample(universe, 1652) for x in range(1000)]

実行には1秒もかかりません。重複を避けたい場合(そもそもありそうもない)、セットを使用できます

>>> result = set()
>>> while len(result) < 1000:
...     result.add(tuple(random.sample(universe, 1652)))
于 2012-10-06T11:27:50.820 に答える