有没有Python相当于R&#39的sample()函数?

时间:2015-12-03 22:11:24

标签: python r probability

我想知道Python是否与R中的sample()函数等效。

sample()函数使用带或不带替换的x元素获取指定大小的样本。

语法为:

sample(x, size, replace = FALSE, prob = NULL)

(更多信息here

4 个答案:

答案 0 :(得分:18)

我认为numpy.random.choice(a, size=None, replace=True, p=None)可能正是您所寻找的。

p参数对应prob函数中的sample()参数。

答案 1 :(得分:7)

pandas(Python最类似于R)中,有DataFrame.sampleSeries.sample方法,这些方法都在0.16.1版本中引入。

例如:

>>> df = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'b': [6, 7, 8, 9, 0]})
>>> df
   a  b
0  1  6
1  2  7
2  3  8
3  4  9
4  5  0

无需替换即可获取3行:

>>> df.sample(3)
   a  b
4  5  0
1  2  7
3  4  9

从列' a'中抽取4行。更换,使用专栏' b'作为选择的相应权重:

>>> df['a'].sample(4, replace=True, weights=df['b'])
3    4
0    1
0    1
2    3

这些方法几乎与R函数相同,允许您从DataFrame / Series中采样特定数量的值(或值的一部分),无论是否替换。请注意,R&#39} prob中的sample()参数对应于pandas方法中的weights

答案 2 :(得分:0)

我相信random包有效。特别是random.sample()。

here

答案 3 :(得分:0)

这里的其他答案很好,但我想提一下 Scikit-Learn 的替代方案,我们也可以为此使用它,see this link

像这样:

resample(np.arange(1,100), n_samples=100, replace=True,random_state=2)

给你这个:

[41 16 73 23 44 83 76  8 35 50 96 76 86 48 64 32 91 21 38 40 68  5 43 52
 39 34 59 68 70 89 69 47 71 96 84 32 67 81 53 77 51  5 91 64 80 50 40 47
  9 51 16  9 18 23 74 58 91 63 84 97 44 33 27  9 77 11 41 35 61 10 71 87
 71 20 57 83  2 69 41 82 62 71 98 19 85 91 88 23 44 53 75 73 91 92 97 17
 56 22 44 94]