skbio.stats.isubsample¶
- skbio.stats.isubsample(items, maximum, minimum=1, buf_size=1000, bin_f=None)[源代码]¶
从垃圾箱中随机抽取子样本,无需更换。
状态:从0.4.0开始实验。
从未知数量的输入项中随机抽取没有替换的项,这些项可能落入未知数量的存储箱中。此方法适用于a)无法放入内存或b)对任意数据类型的子采样集合的数据。
- 参数:
items (Iterable) -- 要评估的项目。
maximum (unsigned int) -- 每个箱子的最大项目数。
minimum (unsigned int, optional) -- 每个箱子的最小项目数。默认值为1。
buf_size (unsigned int, optional) -- 随机值缓冲区的大小。此缓冲区保存从项中分配给每个项的随机值。实际上,这个值不太可能需要更改。增加它将需要更多的驻留内存,但可能会减少对PRNG的函数调用数量,而减少它将导致更多的函数调用和更低的内存开销。默认值为1000。
bin_f (function, optional) -- 方法确定项与哪个bin关联。如果没有(默认值),则所有项目都被视为同一存储箱的一部分。此函数将与items中的每个条目一起提供,并且必须返回一个散列值,该值指示该条目应该放在哪个bin中。
- 返回:
(箱子,物品)
- 返回类型:
generator
- 抛出:
ValueError -- 如果
minimum
是>maximum
.ValueError -- 如果
minimum
<1或如果maximum
< 1。
备注
随意地走到
maximum
每个箱子的物品。如果垃圾箱的maximum
,只有那些有>=minimum
项目被退回。这种方法最多也行得通
maximum
*N data,其中N是箱数。与仓位相关联的所有项目被保留的概率相等。
示例
从一组解复用序列中随机为每个样本保留2个序列:
>>> from skbio.stats import isubsample >>> import numpy as np >>> np.random.seed(123) >>> seqs = [('sampleA', 'AATTGG'), ... ('sampleB', 'ATATATAT'), ... ('sampleC', 'ATGGCC'), ... ('sampleB', 'ATGGCT'), ... ('sampleB', 'ATGGCG'), ... ('sampleA', 'ATGGCA')] >>> bin_f = lambda item: item[0] >>> for bin_, item in sorted(isubsample(seqs, 2, bin_f=bin_f)): ... print(bin_, item[1]) sampleA AATTGG sampleA ATGGCA sampleB ATATATAT sampleB ATGGCG sampleC ATGGCC
现在,我们将最小值设置为2:
>>> bin_f = lambda item: item[0] >>> for bin_, item in sorted(isubsample(seqs, 2, 2, bin_f=bin_f)): ... print(bin_, item[1]) sampleA AATTGG sampleA ATGGCA sampleB ATATATAT sampleB ATGGCG