如何能够从一个具有n
元素,n
时间的列表中随机选择一个数字,而不必选择列表中的同一个元素两次。我编写了一个代码来选择列表中元素的序列号,但速度很慢:
>>>redshift=np.array([0.92,0.17,0.51,1.33,....,0.41,0.82])
>>>redshift.shape
(1225,)
exclude=[]
k=0
ng=1225
while (k < ng):
flag1=0
sq=random.randint(0, ng)
while (flag1<1):
if sq in exclude:
flag1=1
sq=random.randint(0, ng)
else:
print sq
exclude.append(sq)
flag1=0
z=redshift[sq]
k+=1
它不会选择列表中所有元素的序列号。
为什么不把列表洗牌并遍历元素:
如果要保持原始列表的顺序不变,并且不想创建} :
shuffle
副本,则可以对任何n <= len(lst)
使用^{因为您已经在使用一个numpy数组,所以最好使用该包中的工具。
可以将numpy.random.choice与
replace=False
一起使用。每个元素只使用一次:由于每个元素只使用一次,如果尝试获取的元素超过数组大小,则会出现值错误:
如果只想将数组(或副本)洗牌到位,也可以使用np.random.shuffle:
请注意,将numpy数组保存在numpy中比切换回Python数据结构进行排序版本之类的操作要快得多:
这是一个测试用例——速度快了4倍多。
相关问题 更多 >
编程相关推荐