1. 基于random模块
random.sample(population, k)
从 population 中不放回抽取 k 个元素
population:可以为可迭代是的数据对象,如list,setk:随机抽取的样本数量不放回抽样
import random
N
= range(10)
m
= 3
a
= random
.sample
(N
, m
)
print(a
)
Out
: [0, 5, 8]
2. 基于numpy模块
numpy.random.choice(a, size=None, replace=True, p=None)
Help on built
-in function choice
:
choice
(...) method of numpy
.random
.mtrand
.RandomState instance
choice
(a
, size
=None, replace
=True, p
=None)
Generates a random sample
from a given
1-D array
.. versionadded
:: 1.7.0
.. note
::
New code should use the ``choice`` method of a ``default_rng
()``
instance instead
; see `random
-quick
-start`
.
Parameters
----------
a
: 1-D array
-like
or int
If an ndarray
, a random sample
is generated
from its elements
.
If an
int, the random sample
is generated
as if a were np
.arange
(a
)
size
: int or tuple of ints
, optional
Output shape
. If the given shape
is, e
.g
., ``
(m
, n
, k
)``
, then
``m
* n
* k`` samples are drawn
. Default
is None, in which case a
single value
is returned
.
replace
: boolean
, optional
Whether the sample
is with or without replacement
p
: 1-D array
-like
, optional
The probabilities associated
with each entry
in a
.
If
not given the sample assumes a uniform distribution over
all
entries
in a
.
Returns
-------
samples
: single item
or ndarray
The generated random samples
Raises
------
ValueError
If a
is an
int and less than zero
, if a
or p are
not 1-dimensional
,
if a
is an array
-like of size
0, if p
is not a vector of
probabilities
, if a
and p have different lengths
, or if
replace
=False and the sample size
is greater than the population
size
See Also
--------
randint
, shuffle
, permutation
Generator
.choice
: which should be used
in new code
Notes
-----
Sampling random rows
from a
2-D array
is not possible
with this function
,
but
is possible
with `Generator
.choice` through its ``axis`` keyword
.
Examples
--------
Generate a uniform random sample
from np
.arange
(5) of size
3:
>>> np
.random
.choice
(5, 3)
array
([0, 3, 4])
>>>
Generate a non
-uniform random sample
from np
.arange
(5) of size
3:
>>> np
.random
.choice
(5, 3, p
=[0.1, 0, 0.3, 0.6, 0])
array
([3, 3, 0])
Generate a uniform random sample
from np
.arange
(5) of size
3 without
replacement
:
>>> np
.random
.choice
(5, 3, replace
=False)
array
([3,1,0])
>>>
Generate a non
-uniform random sample
from np
.arange
(5) of size
3 without replacement
:
>>> np
.random
.choice
(5, 3, replace
=False, p
=[0.1, 0, 0.3, 0.6, 0])
array
([2, 3, 0])
Any of the above can be repeated
with an arbitrary array
-like
instead of just integers
. For instance
:
>>> aa_milne_arr
= ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> np
.random
.choice
(aa_milne_arr
, 5, p
=[0.5, 0.1, 0.1, 0.3])
array
(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'],
dtype
='<U11')