Обобщить Numpy нарезки Python - PullRequest
0 голосов
/ 29 ноября 2018

Я не понимаю, как я могу обобщить нарезку массива numpy.См. Следующий фрагмент:

x_train = data[:train_set_size,:-1,4:-1]    
x_valid = data[train_set_size:train_set_size+valid_set_size,:-1,4:-1]
x_test = data[train_set_size+valid_set_size:,:-1,4:-1]

y_train = data[:train_set_size,-1,-2:]
y_valid = data[train_set_size:train_set_size+valid_set_size,-1,-2:]
y_test = data[train_set_size+valid_set_size:,-1,-2:]

Как видите, x набор нарезан как :-1,4:-1, а y установлен как -1,-2:.Если мне нужно внести изменения, то мне нужно изменить 3 раза, тогда как, если есть способ сохранить срезы в переменной и просто изменить переменную, и изменения будут отражены.

например: xset_slice = ":-1,4:-1" и yset_slice = "-1,-2:".Тогда просто замените на место следующим образом:

x_train = data[:train_set_size,xset_slice ]    
x_valid = data[train_set_size:train_set_size+valid_set_size,xset_slice ]
x_test = data[train_set_size+valid_set_size:,xset_slice ]
y_train = data[:train_set_size,-1,-2:]
y_valid = data[train_set_size:train_set_size+valid_set_size,yset_slice ]
y_test = data[train_set_size+valid_set_size:,yset_slice]

Но такое утверждение дает ошибку.Поэтому, пожалуйста, дайте мне знать, есть ли аналогичная методология, которая может мне помочь.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Вы можете построить индексы из slice объектов и кортежей:

slice1 = slice(-1)
slice2 = slice(4,-1)
slice3 = slice(-2,None)

x_train = data[:train_set_size,slice1, slice2]    
x_valid = data[train_set_size:train_set_size+valid_set_size, slice1, slice2]
x_test = data[train_set_size+valid_set_size:, slice1, slice2]

Создать составной кортеж, объединив несколько кортежей:

tup1 = (slice1, slice2)
# or with np.s_[:-1, 4:-1]
x_train = data[(slice(train_set_size),+tup1]    
...
0 голосов
/ 29 ноября 2018

вы можете использовать sklearn.model_selection.train_test_split

 X_train, X_test, y_train, y_test 
    = train_test_split(X, y, test_size=0.2, random_state=1)

 X_train, X_val, y_train, y_val 
    = train_test_split(X_train, y_train, test_size=0.2, random_state=1)
...