洗牌VS置换numpy的(shuffle vs permute numpy)

2019-07-21 21:06发布

是什么区别numpy.random.shuffle(x)numpy.random.permutation(x)

我已阅读文档页面,但如果有任何两者之间的区别时,我只是想随机洗牌数组中的元素我无法理解。

为了更精确假设我有一个数组x=[1,4,2,8]

如果我要生成x的随机排列,然后就是什么区别shuffle(x)permutation(x)

Answer 1:

np.random.permutation有来自两个不同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


Answer 2:

添加到什么@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]


文章来源: shuffle vs permute numpy