Как перетасовать два массива numpy, чтобы индексы записей оставались выровненными в обоих после перетасовки?

#python #arrays #numpy #shuffle

Вопрос:

У меня есть массив 4D и массив 1D:

 import numpy as np

data = np.random.randn(10, 1, 5, 5)    # num_records, depth, height, width
labels = np.array([1,1,1,1,1,0,0,0,0,0])
 

Я хочу перемешать данные и метки, num_records чтобы получить labels их в случайном порядке.

Я знаю, что можно было бы использовать shuffle функцию: np.random.shuffle(data) . Но я не знаю, как сохранить связь между data labels перетасовкой и после нее.

Ответ №1:

Это перемешивает оба массива вместе:

 import numpy as np

data = np.random.randn(10, 1, 5, 5)    # num_records, depth, height, width
labels = np.array([1,1,1,1,1,0,0,0,0,0])

# shuffle indices
idx = np.random.permutation(range(len(labels)))

# shuffle together
data, labels = data[idx,:,:,:], labels[idx]
 

Комментарии:

1. Вам не нужны конечные двоеточия в numpy. data, labels = data[idx], labels[idx] будет делать то же самое

Ответ №2:

 import sklearn.utils as sku
array1_shuffled, array2_shuffled = sku.shuffle(array1, array2)
 

https://www.kite.com/python/answers/how-to-shuffle-two-numpy-arrays-in-unision-in-python