Hap*_*yPy 16 python random numpy
是否可以修改numpy.random.choice函数以使其返回所选元素的索引?基本上,我想创建一个列表并随机选择元素而无需替换
import numpy as np
>>> a = [1,4,1,3,3,2,1,4]
>>> np.random.choice(a)
>>> 4
>>> a
>>> [1,4,1,3,3,2,1,4]
Run Code Online (Sandbox Code Playgroud)
a.remove(np.random.choice(a))将使用它遇到的值(a[1]在上面的示例中)删除列表的第一个元素,这可能不是所选元素(例如,a[7]).
Ósc*_*pez 10
这是找出随机选择元素的索引的一种方法:
import random # plain random module, not numpy's
random.choice(list(enumerate(a)))[0]
=> 4 # just an example, index is 4
Run Code Online (Sandbox Code Playgroud)
或者您可以在一个步骤中检索元素和索引:
random.choice(list(enumerate(a)))
=> (1, 4) # just an example, index is 1 and element is 4
Run Code Online (Sandbox Code Playgroud)
numpy.random.choice(a, size=however_many, replace=False)
Run Code Online (Sandbox Code Playgroud)
如果你想要一个没有替换的样品,只需要numpy让你成为一个样品.不要重复循环和绘制项目.这将产生臃肿的代码和糟糕的表现.
例:
>>> a = numpy.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> numpy.random.choice(a, size=5, replace=False)
array([7, 5, 8, 6, 2])
Run Code Online (Sandbox Code Playgroud)
关于你的第一个问题,你可以反过来,从数组的索引中随机选择a,然后获取值.
>>> a = [1,4,1,3,3,2,1,4]
>>> a = np.array(a)
>>> random.choice(arange(a.size))
6
>>> a[6]
Run Code Online (Sandbox Code Playgroud)
但是如果你只是需要随机样品而不需要更换,那就replace=False行了.不记得它何时首次加入random.choice,可能是1.7.0.因此,如果你运行很旧,numpy它可能无法正常工作.请记住默认是replace=True
| 归档时间: |
|
| 查看次数: |
21860 次 |
| 最近记录: |