Вопрос по numpy, permutation, shuffle, python, scipy – перетасовать против перестановки NumPy

57

В чем разница междуnumpy.random.shuffle(x) а также ?numpy.random.permutation(x)

Я прочитал страницы документа, но я не мог понять, есть ли какая-либо разница между этими двумя, когда я просто хочу случайным образом перемешать элементы массива.

Чтобы быть более точным, предположим, у меня есть массив.x=[1,4,2,8]

Если я хочу генерировать случайные перестановки х, то в чем разница междуshuffle(x) а также ?permutation(x)

Ваш Ответ

2   ответа
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]
Я продолжаю получать это: TypeError: только целочисленные скалярные массивы могут быть преобразованы в скалярный индекс john ktejik
Чтобы уточнить @ hlin117, это работает только в том случае, если x и y являются массивами numpy. Если вы попытаетесь сделать это с помощью встроенных списков питонов, он выдаст ошибку TypeError. benjaminjsanders
71

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
Когда используется наpanda.Index, толькоpermutation работает иshuffle Безразлично»т. Как этот случай вписывается в ваше объяснение? Heisenberg
@Heisenbergpermutation приводит свой аргумент в ndarray (путем копирования);pandas.Index достаточно отличается от ndarray, чтоshuffle победил'не будет работать с ним, но будет работать с ndarray, созданным из него. ecatmur

Похожие вопросы