洗牌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]