问题
I want to know if Python has an equivalent to the sample()
function in R.
The sample() function takes a sample of the specified size from the elements of x using either with or without replacement.
The syntax is:
sample(x, size, replace = FALSE, prob = NULL)
(More information here)
回答1:
I think numpy.random.choice(a, size=None, replace=True, p=None)
may well be what you are looking for.
The p
argument corresponds to the prob
argument in the sample()
function.
回答2:
In pandas (Python's closest analogue to R) there are the DataFrame.sample and Series.sample methods, which were both introduced in version 0.16.1.
For example:
>>> 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
Sampling 3 rows without replacement:
>>> df.sample(3)
a b
4 5 0
1 2 7
3 4 9
Sample 4 rows from column 'a' with replacement, using column 'b' as the corresponding weights for the choices:
>>> df['a'].sample(4, replace=True, weights=df['b'])
3 4
0 1
0 1
2 3
These methods are almost identical to the R function, allowing you to sample a particular number of values - or fraction of values - from your DataFrame/Series, with or without replacement. Note that the prob
argument in R's sample()
corresponds to weights
in the pandas methods.
回答3:
I believe that the random
package works. Specifically random.sample().
here
回答4:
Other answers here are great, but I'd like to mention an alternative from Scikit-Learn that we can also use for this, see this link.
Something like this:
resample(np.arange(1,100), n_samples=100, replace=True,random_state=2)
Gives you this:
[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]
来源:https://stackoverflow.com/questions/34077204/is-there-a-python-equivalent-to-rs-sample-function