numpy.random.choice和random.choice的输入参数有区别吗?
Is there a difference between the input paramaters of numpy.random.choice and random.choice?
为什么 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() 相同的行为?
好吧 np.random.choice
如文档中所述,需要一个一维数组,并且当表示为数组时您的输入将是 2D
。所以,它不会像那样简单地工作。
为了让它工作,我们可以输入输入的长度并让它 select 一个索引,当索引到输入中时,它与 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 的一维数组,这样我们就可以直接使用 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)
相关地,如果你想随机抽样 行 的二维矩阵
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 等多次采样
为什么 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() 相同的行为?
好吧 np.random.choice
如文档中所述,需要一个一维数组,并且当表示为数组时您的输入将是 2D
。所以,它不会像那样简单地工作。
为了让它工作,我们可以输入输入的长度并让它 select 一个索引,当索引到输入中时,它与 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 的一维数组,这样我们就可以直接使用 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)
相关地,如果你想随机抽样 行 的二维矩阵
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 等多次采样