93

numpy.random.shuffle(x)とはどう違いnumpy.random.permutation(x)ますか?

ドキュメントページを読みましたが、配列の要素をランダムにシャッフルしたいだけの場合、2つに違いがあるかどうかわかりませんでした。

より正確には、配列があるとしますx=[1,4,2,8]

shuffle(x)x のランダム順列を生成したい場合、との違いは何permutation(x)ですか?

4

4 に答える 4

124

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
于 2013-03-18T10:18:21.457 に答える
36

@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]
于 2015-12-06T21:26:20.077 に答える
3

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

于 2020-06-10T13:51:48.133 に答える