Вот как я бы это сделал
def split(x, y, train_ratio=0.7):
x_size = x.shape[0]
train_size = int(x_size * train_ratio)
test_size = x_size - train_size
train_indices = np.random.choice(x_size, size=train_size, replace=False)
mask = np.zeros(x_size, dtype=bool)
mask[train_indices] = True
x_train, y_train = x[mask], y[mask]
x_test, y_test = x[~mask], y[~mask]
return (x_train, y_train), (x_test, y_test)
Я просто выбираю необходимое количество индексов, которое мне нужно (случайным образом) для моего набора поездов, остальные будут для набора тестов.
Затем используйте маску, чтобы выбрать поезд и проверить образцы.