keisukeのブログ

***乱雑です!自分用のメモです!*** 統計や機械学習の勉強と、読み物を書く練習と、備忘録用のブログ

numpyのshuffleとpermutationの違い

python - shuffle vs permute numpy - Stack Overflow

numpyにはshuffle(x)とpermutation(x)というほぼ同じ機能の関数があります.
どちらも,配列をランダムに並び替えますが,違いが2つあります.

ひとつは,shuffle(x)は配列をin-placeで並び替えるが,permutation(x)は並び替えた配列のコピーを生成するという点です.つまり:

>>> import numpy as np
>>> x = np.array([1,2,3,4,5])
>>> y = np.random.permutation(x)
>>> # y : [3,1,4,2,5]
>>> # x : [1,2,3,4,5]
>>>
>>> x = np.array([1,2,3,4,5])
>>> y = np.random.shuffle(x)
>>> # y : None
>>> # x : [5,2,3,4,1]

もうひとつの違いは,permutation(x)には配列だけでなくint型整数も渡せるという点です.
permutation(5)は,permutation(list(range(5)))と同じ働きをします.(permutation(arange(5))でも同じです.)