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

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

要素のシャッフル

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」プログラムのコメントで、ランダムソート → ランダムシャッフル