Kur*_*eek -1 python random numpy
根据http://docs.scipy.org/doc/numpy-dev/reference/produced/numpy.random.choice.html,使用replace = Falsewith Numpy random.choice方法可以使样本不需替换。但是,这似乎不适用于我:
In [33]: import numpy as np
In [34]: arr = range(5)
In [35]: number = np.random.choice(arr, replace = False)
In [36]: arr
Out[36]: [0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
该数组arr仍在range(5)采样后,并且没有缺少我所期望的(随机)数字。我如何从中取样range(5)而不更换?
如其中一条注释中所述,np.choice从一个序列中选择替换或不替换的一系列数字。但是它不会修改顺序。
容易的替代
arr = range(5)
# numbers below will never contain repeated numbers (replace=False)
numbers = np.random.choice(arr, 3, replace=False)
Run Code Online (Sandbox Code Playgroud)
我认为您想要的行为是:
arr = range(5)
all_but_one = np.random.choice(arr, len(arr) -1, replace=False)
Run Code Online (Sandbox Code Playgroud)
因此您可以选择N-1个数字而不进行替换(以避免重复),从而有效地从可迭代对象中删除一个随机元素。
更有效的选择
arr = range(5)
random_index = np.random.randint(0, len(arr))
arr.pop(random_index)
Run Code Online (Sandbox Code Playgroud)