首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Numpy:从2D数组中获取随机行集合

Numpy:从2D数组中获取随机行集合
EN

Stack Overflow用户
提问于 2013-01-11 00:30:47
回答 8查看 206K关注 0票数 197

我有一个非常大的2D数组,它看起来像这样:

代码语言:javascript
复制
a=
[[a1, b1, c1],
 [a2, b2, c2],
 ...,
 [an, bn, cn]]

使用a,有没有一种简单的方法来获得一个新的2D数组,例如,从初始数组numpy中随机获得2行(不需要替换)?

例如:

代码语言:javascript
复制
b=
[[a4,  b4,  c4],
 [a99, b99, c99]]
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-01-11 00:35:10

代码语言:javascript
复制
>>> A = np.random.randint(5, size=(10,3))
>>> A
array([[1, 3, 0],
       [3, 2, 0],
       [0, 2, 1],
       [1, 1, 4],
       [3, 2, 2],
       [0, 1, 0],
       [1, 3, 1],
       [0, 4, 1],
       [2, 4, 2],
       [3, 3, 1]])
>>> idx = np.random.randint(10, size=2)
>>> idx
array([7, 6])
>>> A[idx,:]
array([[0, 4, 1],
       [1, 3, 1]])

把它们放在一起,形成一个一般的情况:

代码语言:javascript
复制
A[np.random.randint(A.shape[0], size=2), :]

对于非替换(numpy 1.7.0+):

代码语言:javascript
复制
A[np.random.choice(A.shape[0], 2, replace=False), :]

在1.7版本之前,我不相信有一个好的方法来生成随机列表而不进行替换。也许您可以设置一个较小的定义,以确保两个值不相同。

票数 250
EN

Stack Overflow用户

发布于 2015-01-07 16:37:05

这是一个老帖子,但这是最适合我的:

代码语言:javascript
复制
A[np.random.choice(A.shape[0], num_rows_2_sample, replace=False)]

将replace=False更改为True以获得相同的结果,但需要替换。

票数 60
EN

Stack Overflow用户

发布于 2015-08-04 02:58:14

另一种选择是创建一个随机掩码,如果您只想按某个因子对数据进行下采样。假设我想将原始数据集的下采样降至25%,该数据集当前保存在数组data_arr

代码语言:javascript
复制
# generate random boolean mask the length of data
# use p 0.75 for False and 0.25 for True
mask = numpy.random.choice([False, True], len(data_arr), p=[0.75, 0.25])

现在,您可以调用data_arr[mask]并返回大约25%的随机抽样的行。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14262654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档