回答:
import random
random.shuffle(array)
sklearnを使用してこれを行う別の方法
from sklearn.utils import shuffle
X=[1,2,3]
y = ['one', 'two', 'three']
X, y = shuffle(X, y, random_state=0)
print(X)
print(y)
出力:
[2, 1, 3]
['two', 'one', 'three']
利点:マッピングを中断することなく、複数のアレイを同時にランダム化できます。そして 'random_state'は、再現可能な動作のシャッフルを制御できます。
他の答えが最も簡単ですが、random.shuffle
メソッドが実際には何も返さないのは少し面倒です-与えられたリストをソートするだけです。呼び出しをチェーンしたい場合、またはシャッフルされた配列を1行で宣言できる場合は、次のようにします。
import random
def my_shuffle(array):
random.shuffle(array)
return array
次に、次のような行を実行できます。
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
通常のPythonリストを処理するときrandom.shuffle()
、前の回答が示すように、仕事をします。
それがに来るときしかし、ndarray
(numpy.array
)、random.shuffle
元を破るようですndarray
。次に例を示します。
import random
import numpy as np
import numpy.random
a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a
ただ使う: np.random.shuffle(a)
のようrandom.shuffle
にnp.random.shuffle
、配列をその場でシャッフルします。
新しい配列が必要な場合に備えて、以下を使用できますsample
。
import random
new_array = random.sample( array, len(array) )
ランダムなキーで配列を並べ替えることができます
sorted(array, key = lambda x: random.random())
キーは一度だけ読み込まれるので、並べ替え中のアイテムの比較は依然として効率的です。
random.shuffle(array)
Cで記述されているため、見た目は速くなります
array
私は意味 Random
の要素を:すなわちで生成されるかもしれない新しいクラスのインスタンスごとに。私は実際にはわかりません:これを行うには間違った方法になるでしょう:を作成してからを呼び出す必要があります。しかし、ないように注意してくださいPythonはどのように動作しますlambda
random.random()
Random
java
Random rng = Random()
rng.nextGaussian()
random.random()
使用しrandom.shuffle()
たかどうかはわかりませんが、「なし」が返されるので、これを書いたので、誰かに役立つかもしれません
def shuffle(arr):
for n in range(len(arr) - 1):
rnd = random.randint(0, (len(arr) - 1))
val1 = arr[rnd]
val2 = arr[rnd - 1]
arr[rnd - 1] = val1
arr[rnd] = val2
return arr
random.shuffle()
は繰り返しを引き起こすため、多次元配列では使用しないでください。
最初の次元に沿って配列をシャッフルしたいと想像してください。次のテスト例を作成できます。
import numpy as np
x = np.zeros((10, 2, 3))
for i in range(10):
x[i, ...] = i*np.ones((2,3))
したがって、最初の軸に沿って、i番目の要素は、すべての要素がiに等しい2x3行列に対応します。
多次元配列に正しいシャッフル関数を使用する場合、つまりnp.random.shuffle(x)
、配列は必要に応じて最初の軸に沿ってシャッフルされます。ただし、使用random.shuffle(x)
すると繰り返しが発生します。len(np.unique(x))
これは、シャッフル後に実行することで確認できます。これはnp.random.shuffle()
、を使用しrandom.shuffle()
た場合に(予想どおり)10になりますが、約5になります。