如何使用numpy从列表中随机选择n个元素?
Posted
技术标签:
【中文标题】如何使用numpy从列表中随机选择n个元素?【英文标题】:How to get randomly select n elements from a list using in numpy? 【发布时间】:2017-01-26 14:14:49 【问题描述】:我有一个向量列表:
>>> import numpy as np
>>> num_dim, num_data = 10, 5
>>> data = np.random.rand(num_data, num_dim)
>>> data
array([[ 0.0498063 , 0.18659463, 0.30563225, 0.99681495, 0.35692358,
0.47759707, 0.85755606, 0.39373145, 0.54677259, 0.5168117 ],
[ 0.18034536, 0.25935541, 0.79718771, 0.28604057, 0.17165293,
0.90277904, 0.94016733, 0.15689765, 0.79758063, 0.41250143],
[ 0.80716045, 0.84998745, 0.17893211, 0.36206016, 0.69604008,
0.27249491, 0.92570247, 0.446499 , 0.34424945, 0.08576628],
[ 0.35311449, 0.67901964, 0.71023927, 0.03120829, 0.72864953,
0.60717032, 0.8020118 , 0.36047207, 0.46362718, 0.12441942],
[ 0.1955419 , 0.02702753, 0.76828842, 0.5438226 , 0.69407709,
0.20865243, 0.12783666, 0.81486189, 0.95583274, 0.30157658]])
从data
,我需要随机选择3个向量,我可以这样做:
>>> import random
>>> random.sample(data, 3)
[array([ 0.80716045, 0.84998745, 0.17893211, 0.36206016, 0.69604008,
0.27249491, 0.92570247, 0.446499 , 0.34424945, 0.08576628]), array([ 0.18034536, 0.25935541, 0.79718771, 0.28604057, 0.17165293,
0.90277904, 0.94016733, 0.15689765, 0.79758063, 0.41250143]), array([ 0.35311449, 0.67901964, 0.71023927, 0.03120829, 0.72864953,
0.60717032, 0.8020118 , 0.36047207, 0.46362718, 0.12441942])]
我检查了http://docs.scipy.org/doc/numpy/reference/routines.random.html 的文档,但我无法确定numpy
中是否有random.sample()
这样的功能。
numpy.random.sample()
与random.sample()
不一样对吗?
random.sample()
是否与 numpy
等价?
【问题讨论】:
我想你正在寻找np.random.choice
。尽管您需要传递 replace=False
才能使其表现得像 random.sample
。
你想做什么? numpy.random.sample
做了(或不做)你想要(或不想要)它做什么?
@brenbarn 我需要随机选择 n 号。向量列表中的元素。
@ayhan,类似于:data[np.random.choice(range(len(data)), size=3, replace=False)]
?
是的,完全正确。你不需要range
。您可以传递一个整数,然后它将从np.arange(n)
中进行选择。
【参考方案1】:
正如@ayhan 确认的那样,可以这样做:
>>> data[np.random.choice(len(data), size=3, replace=False)]
array([[ 0.80716045, 0.84998745, 0.17893211, 0.36206016, 0.69604008,
0.27249491, 0.92570247, 0.446499 , 0.34424945, 0.08576628],
[ 0.35311449, 0.67901964, 0.71023927, 0.03120829, 0.72864953,
0.60717032, 0.8020118 , 0.36047207, 0.46362718, 0.12441942],
[ 0.1955419 , 0.02702753, 0.76828842, 0.5438226 , 0.69407709,
0.20865243, 0.12783666, 0.81486189, 0.95583274, 0.30157658]])
来自docs:
numpy.random.choice(a, size=None, replace=True, p=None)
从给定的一维数组生成随机样本
np.random.choice(data, size=3, replace=False)
从data
的索引列表中选择 3 个元素而不进行替换。
然后data[...]
对索引进行切片并检索使用np.random.choice
选择的索引。
【讨论】:
以上是关于如何使用numpy从列表中随机选择n个元素?的主要内容,如果未能解决你的问题,请参考以下文章
从 C# 中的 List<T> 中选择 N 个随机元素的算法[重复]