Подтвердить что ты не робот

Перемешивание массива NumPy вдоль заданной оси

Учитывая следующий массив NumPy,

> a = array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])

достаточно просто перетасовать одну строку,

> shuffle(a[0])
> a
array([[4, 2, 1, 3, 5],[1, 2, 3, 4, 5],[1, 2, 3, 4, 5]])

Можно ли использовать нотацию индексирования для перетасовки каждой из строк независимо? Или вам нужно перебирать массив. Я имел в виду что-то вроде:

> numpy.shuffle(a[:])
> a
array([[4, 2, 3, 5, 1],[3, 1, 4, 5, 2],[4, 2, 1, 3, 5]]) # Not the real output

хотя это явно не работает.

4b9b3361

Ответ 1

Вы должны называть numpy.random.shuffle() несколько раз, потому что вы произвольно перетасовываете несколько последовательностей. numpy.random.shuffle() работает с любой изменяемой последовательностью и на самом деле не является ufunc. Самый короткий и наиболее эффективный код для перетасовки всех строк двумерного массива a отдельно, вероятно, есть

map(numpy.random.shuffle, a)