パイソンの質問です。オブジェクトの大きな配列を生成していますが、これは小さなランダム サンプルを作成するだけで済みます。問題のオブジェクトを実際に生成するには時間がかかるため、生成する必要のないオブジェクトをスキップして、サンプリングされたオブジェクトのみを明示的に作成することはできないかと思います。
言い換えれば、私は今持っています
a = createHugeArray()
s = random.sample(a,len(a)*0.001)
これはかなり無駄です。私はもっと怠け者のようなものを好むだろう
a = createArrayGenerator()
s = random.sample(a,len(a)*0.001)
これが機能するかどうかはわかりません。random.sample のドキュメントはあまり明確ではありませんが、xrange が非常に高速であると言及されているため、動作する可能性があると思われます。配列の作成をジェネレーターに変換するのは少し面倒なので (ジェネレーターに関する私の知識は非常にさびしいです)、これが機能するかどうかを事前に知りたいです。:)
私が見ることができる別の方法は、xrange を介してランダムなサンプルを作成し、実際にインデックスによって選択されたオブジェクトのみを生成することです。ただし、生成されるインデックスは任意で不必要であるため、これはあまりきれいではありません。また、generateHugeArray メソッドでこれをサポートするには、かなりハックなロジックが必要になります。
ボーナス ポイント: random.sample は実際にどのように機能しますか? 特に、xrange のようなジェネレーターのように、人口のサイズが事前にわからない場合、どのように機能しますか?