numpy.random.shuffle(x)
和numpy.random.permutation(x)
之间的区别是什么?
我已经阅读了doc页面,但是当我想随机改组数组的元素时,我无法理解两者之间是否存在任何差异。
更确切地说,假设我有一个数组x=[1,4,2,8]
。
如果我想生成x的随机排列,那么shuffle(x)
和permutation(x)
之间有什么区别?
答案 0 :(得分:76)
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
答案 1 :(得分:22)
添加@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]
答案 2 :(得分:1)
添加@ecatmur,这是一个简短的说明。首先,我创建了一个数组,数组的形状为3,3,数字从0到8
import numpy as np
x1 = np.array(np.arange(0,9)).reshape(3,3) #array with shape 3,3 and have numbers from 0 to 8
#step1: using np.random.permutation
x_per = np.random.permutation(x1)
print('x_per:', x_per)
print('x_1:', x_1)
#Inference: x1 is not changed and x_per has its rows randomly changed
#The outcome will be
x1: [[0 1 2]
[3 4 5]
[6 7 8]]
x_per:[[3 4 5]
[0 1 2]
[6 7 8]]
#Lets apply shuffling
x2 = np.array(range(9)).reshape(3,3)
x2_shuffle = np.random.shuffle(x2)
print('x2_shuffle:', x2_shuffle)
print('x2', x2)
#Outcome:
x2_shuffle: None
x2 [[3 4 5]
[0 1 2]
[6 7 8]]
关键推断是:当x是数组时,numpy.random.permutation(x)和numpy.random.shuffle(x)都可以沿x方向随机排列x中的元素 第一轴。 numpy.random.permutation(x)实际上返回一个新变量,并且原始数据未更改。其中numpy.random.shuffle(x)更改了原始数据,并且不返回新变量。我只是想举一个例子来说明它可以帮助其他人。谢谢!
答案 3 :(得分:1)
permutation()方法返回一个重新排列的数组(并使原始数组保持不变),该方法将保持原始数组不变并返回经过改组的数组,例如x = [1,4,2 ,8]是原始数组,并且排列方法将返回重新排列的数组(让我们说[8,4,1,2])。现在,您有两个数组,原始数组和重新排列的数组。
另一方面,
shuffle()方法对原始数组进行更改,例如x = [1,4,2,8]是原始数组,并且shuffle方法将返回经过改组的数组(比如说shuffled数组为[8, 4,1,2])。现在,原始数组本身已更改为Shuffled数组,您只剩下shuffled数组了。
参考:-https://www.w3schools.com/python/numpy_random_permutation.asp