2016-01-29 3 views
3

У меня есть 4D-образные обучающие изображения, размеры которых соответствуют (image_number, channels, width, height). У меня также есть двумерные целевые метки, размеры которых соответствуют (image_number, class_number). Когда я тренируюсь, я хочу случайным образом перетасовать данные, используя random.shuffle, но как я могу сохранить ярлыки, перетасованные тем же порядком моих изображений? Спасибо!Как случайным образом перемешать данные и объекты в python?

ответ

1

Если вы хотите Numpy только решение, вы можете просто проиндексировать второй массив на первый, предполагая, что у вас есть те же номера изображений в обоих:

In [67]: train = np.arange(20).reshape(4,5).T 

In [68]: target = np.hstack([np.arange(5).reshape(5,1), np.arange(100, 105).reshape(5,1)]) 

In [69]: train 
Out[69]: 
array([[ 0, 5, 10, 15], 
     [ 1, 6, 11, 16], 
     [ 2, 7, 12, 17], 
     [ 3, 8, 13, 18], 
     [ 4, 9, 14, 19]]) 

In [70]: target 
Out[70]: 
array([[ 0, 100], 
     [ 1, 101], 
     [ 2, 102], 
     [ 3, 103], 
     [ 4, 104]]) 

In [71]: np.random.shuffle(train) 

In [72]: target[train[:,0]] 
Out[72]: 
array([[ 2, 102], 
     [ 3, 103], 
     [ 1, 101], 
     [ 4, 104], 
     [ 0, 100]]) 

In [73]: train 
Out[73]: 
array([[ 2, 7, 12, 17], 
     [ 3, 8, 13, 18], 
     [ 1, 6, 11, 16], 
     [ 4, 9, 14, 19], 
     [ 0, 5, 10, 15]]) 
0

В зависимости от того, что вы хотите сделать, вы можете также случайным образом генерировать номер для каждого измерения вашего массива с

random.randint(a, b) #a and b are the extremes of your array 

, который будет выбирать случайным образом среди ваших объектов.

1

Существует еще один простой способ сделать что. Предположим, что есть всего N изображений. Затем мы можем сделать следующее:

from random import shuffle 

ind_list = [i for i in range(N)] 
shuffle(ind_list) 
train_new = train[ind_list, :,:,:] 
target_new = target[ind_list,] 
Смежные вопросы