私はrange(n)
からの数字のすべての可能な組の中から、交換せずに、サンプルを必要としています。つまり、(0,0)、(0,1)、...、(0、n)、(1,0)、(1,1)、...、(1、n)のコレクションを持っています。 )、...、(n、0)、(n、1)、(n、n)、これらの要素のkサンプルを取得しようとしています。私は明示的にこのコレクションを構築することを避けることを望んでいます。のpython:2Dグリッドから交換せずにサンプリング
私は数字ではなく、数字のタプルのシーケンスからサンプルを必要に応じてrandom.sample(range(n), k)
はシンプルかつ効率的であることを知っています。
もちろん、可能なすべての(n * n = n^2
)タプルを含むリストを明示的に作成してから、random.sample
を呼び出すことができます。しかし、k
がn^2
よりずっと小さい場合、おそらく効率的ではありません。
Python 2と3の効率が同じであるかどうかはわかりません。私はPython 3を使用しています。
タプルは、配列であります意味がありません。一連のタプルからサンプルを取得する必要があるということですか?その場合、これらのタプルがどのように見えるかは不明です。 –
あなたのコード( 'random.sample(レンジ(N)、k)は'作品とすべてのシーケンス、タプル、リスト、文字列や 'collections.Sequence'の任意のサブクラスのために正しいです。あなたはまだあなたのコードを試してみましたか?質問は何? –
@Regebro: 'タプル'からのサンプル= 'nタプルのシーケンスからkタプルのサンプル'。 'シーケンスからのサンプル' = 'n個の要素のシーケンスからk個の要素のサンプル'。私は明確にするために質問を編集するつもりです。私は、シーケンス((0,0)、(0,1)、(0,2)、(1,0)、(1,1)を参照できないということを意味しています。 、(1,2)、(2,0)、(2,1)、(2,2))を簡単に ''サンプル 'を適用できる単純な ''範囲' – max