numpy.random.shuffle(x)
とnumpy.random.permutation(x)
の違いは何ですか?
私はdocページを読みましたが、配列の要素をランダムにシャッフルしたいときに2つの間に違いがあるかどうか理解できませんでした。
より正確に言うと、配列_x=[1,4,2,8]
_があるとします。
Xのランダムな順列を生成したい場合、shuffle(x)
とpermutation(x)
の違いは何ですか?
_np.random.permutation
_には、_np.random.shuffle
_との2つの違いがあります。
np.random.shuffle
_は配列をその場でシャッフルしますnp.random.shuffle(np.arange(n))
を返しますXが整数の場合、np.arange(x)をランダムに並べ替えます。 xが配列の場合、コピーを作成し、要素をランダムにシャッフルします。
ソースコードはこれを理解するのに役立つかもしれません:
_3280 def permutation(self, object x):
...
3307 if isinstance(x, (int, np.integer)):
3308 arr = np.arange(x)
3309 else:
3310 arr = np.array(x)
3311 self.shuffle(arr)
3312 return arr
_
@ecatmurが言ったことに加えて、np.random.permutation
は、特に分類のために順序付きペアをシャッフルする必要がある場合に役立ちます。
from np.random import permutation
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
# Data is currently unshuffled; we should shuffle
# each X[i] with its corresponding y[i]
perm = permutation(len(X))
X = X[perm]
y = y[perm]