2017-07-10 16 views
0

私の質問は以下の通りです。私は現在、長さmの生成されたリストを使って作業しています。しかし、このリストは、最終的な長さの引数としてnをとるアルゴリズムの結果であると考えられます。 mは常にnよりはるかに大きい。現在、mがlen(list)の結果であるwhileループを実行しています。 すなわち:N個のランダムなオブジェクトを削除する最速の方法

from numpy import random as rnd 
m = 400000 
n = 3000 
list = range(0, m) 
while len(list) > n: 
    rmi = rnd.randint(0, len(list)) 
    del list[rmi] 
    print('%s/%s' %(len(list), n)) 

このアプローチは確かしかし、作品実行するのに非常に長い時間がかかります。リストからm-n個のランダムなエントリを削除する方が効率的で時間のかかる方法はありますか?削除されたエントリはランダムでなければなりません。または、結果のリストはもはやそれが何であるべきかを表しません。

編集: その後、サイズnの2つの配列がありますが、サイズ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 '私の質問の最初の部分に回答しますが、2番目の部分はうまくいきません。

答えて

3

のTry numpy.random.choice、それはあなたのリストのランダムなサンプルを作成します。

https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.random.choice.html

import numpy as np 
... 
np.random.choice(range(0,m), size=n) 
+0

が、これはしかし、今後の私のコードで私の問題の一部を解決し、私は問題が発生したありがとう2つの別々の配列から同じインデックス要素をランダムに削除する必要があります.1つは時間を表し、もう1つはシミュレートされた値です。 – StarKiller4011

+1

このインデックスで選択して実際のデータを抽出した後、これを範囲(m)で実行し、結果をサンプルインデックスとして解釈することができます: 'list_sample = list [np.random.choice(range(m)、size = n)] '。したがって、 'ind'がchoiseの結果であれば、' list_2_sample = list_2 [ind] 'を実行できます – alvis

関連する問題