numpy.random.choice和random.choice的输入参数之间有区别吗?

stszievb  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(172)

为什么numpy. random. choice和random. choice的作用不同?当我这样做时:

>>> random.choice([(1,2),(4,3)])
 (1, 2)

它起作用了。
但当我这么做的时候

>>> np.random.choice([(1,2), (3,4)])
 Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "mtrand.pyx", line 1393, in mtrand.RandomState.choice 
 (numpy/random/mtrand/mtrand.c:15450)
 ValueError: a must be 1-dimensional

如何实现与numpy.random.choice()中的random.choice()相同的行为?

00jrzges

00jrzges1#

np.random.choice,正如文档中提到的,期望一个1D数组,当你的输入被表示为数组时,它将是2D,所以,它不会像这样简单地工作。
为了使它工作,我们可以输入输入的长度,并让它选择一个索引,当索引到输入中时,它将是来自random.choice的等价索引,如下所示-

out = a[np.random.choice(len(a))] # a is input

样品运行-

In [74]: a = [(1,2),(4,3),(6,9)]

In [75]: a[np.random.choice(len(a))]
Out[75]: (6, 9)

In [76]: a[np.random.choice(len(a))]
Out[76]: (1, 2)

或者,我们可以将输入转换为对象dtype的1D数组,这将允许我们直接使用np.random.choice,如下所示-

In [131]: a0 = np.empty(len(a),dtype=object)

In [132]: a0[:] = a

In [133]: a0.shape
Out[133]: (3,)  # 1D array

In [134]: np.random.choice(a0)
Out[134]: (6, 9)

In [135]: np.random.choice(a0)
Out[135]: (4, 3)
euoag5mw

euoag5mw2#

与此相关,如果你想像这样随机抽取二维矩阵的 * 行

x = np.array([[1, 100], [2, 200], [3, 300], [4, 400]])

你可以这样做

n_rows = x.shape[0]
x[np.random.choice(n_rows, size=n_rows, replace=True), :]

应该适用于具有任意列数的2D矩阵,当然,您可以使用size kwarg等进行任意次数的采样。

相关问题