Поскольку вы хотите перетасовать только столбцы, вы можете просто выполнить перетасовку для транспонированной матрицы:
In [86]: np.random.shuffle(Xtrain.T)
In [87]: Xtrain
Out[87]:
array([[2, 3, 1],
[5, 6, 4],
[7, 3, 1]])
Обратите внимание, что random.suffle () в двумерном массиве перемешивает строки, а не элементы в каждой строке.т.е. меняет положение строк.Поэтому, если вы измените положение транспонированных строк матрицы, вы фактически перетасуете столбцы вашего исходного массива.
Если вам все еще требуется полностью независимое перемешивание, вы можете создать случайные индексы для каждой строки, а затем создать окончательный результат.массив с простой индексацией:
In [172]: def crazyshuffle(arr):
...: x, y = arr.shape
...: rows = np.indices((x,y))[0]
...: cols = [np.random.permutation(y) for _ in range(x)]
...: return arr[rows, cols]
...:
Демо:
In [173]: crazyshuffle(Xtrain)
Out[173]:
array([[1, 3, 2],
[6, 5, 4],
[7, 3, 1]])
In [174]: crazyshuffle(Xtrain)
Out[174]:
array([[2, 3, 1],
[4, 6, 5],
[1, 3, 7]])