Перемешивание массива 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
хотя это явно не работает.
Ответы
Ответ 1
Вы должны называть numpy.random.shuffle()
несколько раз, потому что вы произвольно перетасовываете несколько последовательностей. numpy.random.shuffle()
работает с любой изменяемой последовательностью и на самом деле не является ufunc
. Самый короткий и наиболее эффективный код для перетасовки всех строк двумерного массива a
отдельно, вероятно, есть
map(numpy.random.shuffle, a)