置き換えなし指定された分布に従ってサンプルからn個の要素を選択します。Numpyは特定の次元に沿って置換えなしで選択する
反復解決策は単純です:
for _ in range(n):
np.random.choice(a, size=k, replace=False, p=p)
私はサンプル間で交換することなく、サンプルになるので、私はsize=(k, n)
を設定することはできません。 a
とn
が大きければ、私はベクトル化された解を期待しています。
置き換えなし指定された分布に従ってサンプルからn個の要素を選択します。Numpyは特定の次元に沿って置換えなしで選択する
反復解決策は単純です:
for _ in range(n):
np.random.choice(a, size=k, replace=False, p=p)
私はサンプル間で交換することなく、サンプルになるので、私はsize=(k, n)
を設定することはできません。 a
とn
が大きければ、私はベクトル化された解を期待しています。
だから、完全な反復解は次のようになります。
In [158]: ll=[]
In [159]: for _ in range(10):
...: ll.append(np.random.choice(5,3))
In [160]: ll
Out[160]:
[array([3, 2, 4]),
array([1, 1, 3]),
array([0, 3, 1]),
...
array([0, 3, 0])]
In [161]: np.array(ll)
Out[161]:
array([[3, 2, 4],
[1, 1, 3],
...
[3, 0, 1],
[4, 4, 2],
[0, 3, 0]])
リストの内包としてキャストすることができ
:np.array([np.random.choice(5,3) for _ in range(10)])
。
言い換えれば、あなたA=np.zeros((10,3),int)
とA[i,:]=np.random...
同等あなたはrange(5)
から選択をしたいが、彼らは唯一の行内で一意になりたいです。私は、行の中に
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
...
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
と並び替える値を生成することができる場合、私は思ったんだけど
>>> np.random.choice(5, 3, replace=False)
array([3,1,0])
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
:
np.random.choice
ドキュメント
permute
では、すべての列をシャッフルすることしかできません。だから、私はまだ行を反復することで、置換えなしで選択肢を作り出すことができません。
ここにいくつかの提案があります。
あなたは(n, k)
出力配列を事前に割り当てることができ、その後の選択肢を複数回実行します。
result = np.zeros((n, k), dtype=a.dtype)
for row in range(n):
result[row, :] = np.random.choice(a, size=k, replace=False, p=p)
あなたはn * k
選択インデックスを事前に計算して、すべてを一度にa
に適用することができます。あなたは再びループでnp.choice
を使用したいと思うでしょう、交換せずにインデックスをサンプリングしたいので:
indices = np.concatenate([np.random.choice(a.size, size=k, replace=False, p=p) for _ in range(n)])
result = a[indices].reshape(n, k)
私は本当に –
は 'np.random.choice(np.arange考えてみましょう疑問を理解していません(5)、size =(3、5)、replace = False) 'である。これは、 'Replace = Falseのときに母集団より大きなサンプルを取ることはできません'というエラーを出します。私が望むのは、置き換えなくても、それぞれ5回、 'range(5) 'から3つの値を選ぶことです。 –
あなたはエラーを与えるコードで編集できますか? –