洗牌vs排列numpy

numpy.random.shuffle(x)numpy.random.permutation(x)什么numpy.random.permutation(x)

我已经阅读了文档页面,但我不明白两者之间是否有任何区别,我只是想随机洗牌数组的元素。

更确切地说,假设我有一个数组x=[1,4,2,8]

如果我想生成x的随机排列,那么shuffle(x)permutation(x)之间的区别是什么?

np.random.permutation有两点区别:

  • 如果传递一个数组,它将返回数组的一个混洗副本 ; np.random.shuffle在arrays中洗牌
  • 如果传递一个整数,它将返回一个混洗范围,即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]