シャッフル (ランダムソート)

シャッフル (ランダムソート)

random.shuffle() シーケンス要素のシャッフル

 random.shuffle()ミュータブル (変更可能) なシーケンス x の要素をシャッフル (ランダムソート) します。

 random.shuffle(x [, random])

 オプション引数 random には 0.0 以上 1.0 未満の浮動小数点乱数を指定します。デフォルトでは random() 関数が与えられます。

# RSH

# randomモジュールをインポート
import random

# 乱数を初期化
random.seed(0)

# 夏目漱石の作品
souseki = ["こころ", "三四郎", "夢十夜", "坊ちゃん", "草枕"]

# リストをシャッフル
random.shuffle(souseki)

print(souseki)
['夢十夜', '三四郎', 'こころ', '草枕', '坊ちゃん']

 この関数は受け取ったシーケンスを書き換える破壊的操作を実行するので、引数 x にタプルのようなイミュータブル (変更不能) なシーケンスを渡すことはできません。イミュータブル・シーケンスをシャッフルさせたい場合は、random.sample() を使ってください。
 

numpy.random.shuffle() 配列要素のシャッフル

 numpy.random.shuffle() は受け取った配列の要素をシャッフルして並び替えます。

 numpy.random.shuffle(x)

 この関数は受け取った配列を書き換えます。

# NRS-1

# NumPyをインポート
import numpy as np

# 乱数シードを設定
np.random.seed(0)

# 夏目漱石の作品
souseki = np.array([["坊ちゃん", "吾輩は猫である"],
                    ["それから", "明暗"],
                    ["道草", "倫敦塔"]])

# 要素をシャッフル
np.random.shuffle(souseki)

print(souseki)
[['道草' '倫敦塔']
 ['それから' '明暗']
 ['坊ちゃん' '吾輩は猫である']]

 numpy.random.shuffle() と numpy.arange() を組合わせると、連続数字をシャッフルできます。

# NRS-2

# 乱数シードを設定
np.random.seed(0)

# x=[0 1 2 3 4 5 6 7 8 9]
x = np.arange(10)

# 数字をランダムソート
np.random.shuffle(x)

print(x)
[2 8 4 9 1 6 7 3 0 5]