Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 删除N个随机对象的最快方法_Python 2.7_Performance_Random - Fatal编程技术网

Python 2.7 删除N个随机对象的最快方法

Python 2.7 删除N个随机对象的最快方法,python-2.7,performance,random,Python 2.7,Performance,Random,我的问题如下,我目前正在处理一个生成的长度为m的列表。然而,这个列表应该是一个以n作为最终长度参数的算法的结果。m总是比n大得多。目前我正在运行一个while循环,其中m是len(list)的结果。 即: 这种方法当然有效,但运行时间非常长。有没有一种更有效、更省时的方法从我的列表中删除m-n随机条目?删除的条目必须是随机的,否则结果列表将不再代表它应该是什么 编辑: 稍后在我的代码中,我有两个大小为n的数组,需要缩短为大小b,这里的警告是两个列表都需要随机删除元素,但删除的元素也必须共享相同的

我的问题如下,我目前正在处理一个生成的长度为m的列表。然而,这个列表应该是一个以n作为最终长度参数的算法的结果。m总是比n大得多。目前我正在运行一个while循环,其中m是len(list)的结果。 即:

这种方法当然有效,但运行时间非常长。有没有一种更有效、更省时的方法从我的列表中删除m-n随机条目?删除的条目必须是随机的,否则结果列表将不再代表它应该是什么

编辑: 稍后在我的代码中,我有两个大小为n的数组,需要缩短为大小b,这里的警告是两个列表都需要随机删除元素,但删除的元素也必须共享相同的索引。即:

from numpy import random as rnd
n = 3000
b = 500
list1 = range(0, n)
list2 = rnd.sample(xrange(10000), n)
while len(list1) > b:
    rmi = rnd.randint(0, len(list1))
    del list1[rmi]
    del list2[rmi]
    print('%s/%s' %(len(list1), b)

下面alvis的回答回答了我问题的第一部分,但对第二部分不起作用。

试试numpy.random.choice,它会创建列表的随机样本:


尝试numpy.random.choice,它会创建列表的随机样本:


谢谢,这解决了我的一部分问题,但是现在在我的代码中,我遇到了一个问题,我需要从两个单独的数组中随机删除同一个索引元素,一个表示时间,另一个表示模拟值。您可以在范围(m)上运行此操作,并将结果解释为示例索引,通过此索引选择提取实际数据后:
list\u sample=list[np.random.choice(范围(m),大小=n)]
。因此,如果
ind
是选择的结果,你可以做
list\u 2\u sample=list\u 2[ind]
,谢谢,这解决了我问题的一部分,但是现在在我的代码中,我遇到了一个问题,我需要从两个单独的数组中随机删除相同的索引元素,一个表示时间,另一个表示模拟值。您可以在范围(m)上运行此操作,并在通过此索引选择提取实际数据后将结果解释为样本索引:
list\u sample=list[np.random.choice(范围(m),大小=n)]
。因此,如果选择的结果是
ind
,则可以执行
list\u 2\u sample=list\u 2[ind]
from numpy import random as rnd
n = 3000
b = 500
list1 = range(0, n)
list2 = rnd.sample(xrange(10000), n)
while len(list1) > b:
    rmi = rnd.randint(0, len(list1))
    del list1[rmi]
    del list2[rmi]
    print('%s/%s' %(len(list1), b)
import numpy as np
...
np.random.choice(range(0,m), size=n)