『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

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

要素のシャッフル

random.shuffle()

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

random.shuffle(x [, random])

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

# PYTHON_SHUFFLE

# In[1]

# 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)

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

# NUMPY_SHUFFLE

# In[1]

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

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

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

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

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

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

# In[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]

コメント

  1. HNaito より:

    下記は誤植と思われますので、ご確認ください。
    「NUMPY_SHUFFLE-2」プログラムのコメントで、ランダムソート → ランダムシャッフル