numpy.random.shuffle(x)
とはどう違いnumpy.random.permutation(x)
ますか?
ドキュメントページを読みましたが、配列の要素をランダムにシャッフルしたいだけの場合、2つに違いがあるかどうかわかりませんでした。
より正確には、配列があるとしますx=[1,4,2,8]
。
shuffle(x)
x のランダム順列を生成したい場合、との違いは何permutation(x)
ですか?
numpy.random.shuffle(x)
とはどう違いnumpy.random.permutation(x)
ますか?
ドキュメントページを読みましたが、配列の要素をランダムにシャッフルしたいだけの場合、2つに違いがあるかどうかわかりませんでした。
より正確には、配列があるとしますx=[1,4,2,8]
。
shuffle(x)
x のランダム順列を生成したい場合、との違いは何permutation(x)
ですか?
np.random.permutation
と2つの違いがありnp.random.shuffle
ます:
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]
permutation() メソッドは再配置された配列を返します (元の配列は変更されません)。このメソッドは元の配列をそのまま保持し、シャッフルされた配列を返します。たとえば、x = [1,4,2,8]は元の配列であり、順列メソッドは再配置された配列を返します ([8,4,1,2] としましょう)。これで、元の配列と再配置された配列の 2 つの配列ができました。
その一方で、
shuffle() メソッドは元の配列に変更を加えます。たとえば、x = [1,4,2,8] は元の配列であり、shuffle メソッドはシャッフルされた配列を返します (シャッフルされた配列が [8,4,1 であるとしましょう) 、2])。これで、元の配列自体がシャッフル配列に変更され、シャッフル配列だけが残ります。
参照: - https://www.w3schools.com/python/numpy_random_permutation.asp