ダークサイドにようこそ!

ダンスしたりアプリ開発したり旅したりしているBBOYのブログ

【Python】numpyのshuffleで2次元配列をシャッフル(ランダムソート)するとどうなる

リストや1次元配列をシャッフルするときは分かりやすいのですが、多次元配列(2次元)の場合は一瞬「?」になりやすいので備忘録。
2次元配列を生成して実際にシャッフルしてみます。

import numpy as np
arr = np.arange(9).reshape((3, 3))
print(arr)
# [[0 1 2]
#  [3 4 5]
#  [6 7 8]]
np.random.shuffle(arr)
print(arr)
# [[3 4 5]
#  [0 1 2]
#  [6 7 8]]

最初の軸に沿ってシャッフルされました(行方向)。ちなみに3次元以上の多次元配列でも同様に最初の軸がシャッフルされます。
ついでに行ごとの要素もシャッフルしてみます。

for values in arr:
    np.random.shuffle(values)
print(arr)
# [[4 5 3]
#  [1 2 0]
#  [8 7 6]]

行ごとの要素のindex対応関係はバラバラですが一応シャッフルできました。