Перетасовать и перепутать
В чем разница между numpy.random.shuffle(x)
и numpy.random.permutation(x)
?
Я прочитал страницы doc, но я не мог понять, была ли разница между ними, когда я просто хочу случайным образом перетасовать элементы массива.
Чтобы быть более точным, у меня есть массив x=[1,4,2,8]
.
Если я хочу генерировать случайные перестановки x, то в чем разница между shuffle(x)
и permutation(x)
?
Ответы
Ответ 1
np.random.permutation
имеет два отличия от np.random.shuffle
:
- Если передать массив, он вернет перетасованную копию массива;
np.random.shuffle
перетасовывает массив inplace
- Если передано целое число, оно вернет перетасованный диапазон, т.е.
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
Ответ 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]