gpt4 book ai didi

python - 通过替换对 2D numpy 数组中的行进行采样

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:13 25 4
gpt4 key购买 nike

numpy.random.choice是从一维数组中抽取随机元素的便捷工具:

In [94]: numpy.random.choice(numpy.arange(5), 10)
Out[94]: array([3, 1, 4, 3, 4, 3, 2, 4, 1, 1])

但是文档指定a 参数必须 是一维的。但是,如果我想从二维数组中随机选择行(例如,单热编码器的随机样本),则不能再使用 numpy.random.choice

所以如果我的输入是:

array([[ 1.,  0.,  0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])

我怎样才能从这个数组中随机获取 n 行,就像这样? (n = 10)

array([[ 0.,  0.,  1.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 0., 1.],
[ 1., 0., 0.],
[ 0., 1., 0.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.],
[ 1., 0., 0.]])

最佳答案

根据 this问题,该功能是在 2014 年考虑的,但此后没有对 API 进行实质性添加。然而,有一个更好的解决方案巧妙地利用了 numpy.random.choice 和 numpy 的奇特索引:

开始于

In [102]: x = numpy.eye(3); x
Out[102]:
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])

您可以使用 numpy.random.choice 生成随机索引列表,如下所示:

In [103]: i = numpy.random.choice(3, 10); i
Out[103]: array([2, 2, 0, 2, 1, 1, 2, 0, 0, 1])

然后使用i索引x:

In [104]: x[i]
Out[104]:
array([[ 0., 0., 1.],
[ 0., 0., 1.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.],
[ 1., 0., 0.],
[ 0., 1., 0.]])

有了如此高效的解决方法,我认为没有必要更改 API。

请注意,对于生成具有特定概率分布的行,过程是相同的。指定指数本身的概率分布。

关于python - 通过替换对 2D numpy 数组中的行进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com