2011-02-18 9 views
12

Dada la siguiente matriz NumPy,gama barajado NumPy lo largo de un eje dado

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

es lo suficientemente simple para mezclar una sola fila,

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

¿Es posible el uso de la notación de indexación para mezclar cada uno de las filas de forma independiente? O tienes que iterar sobre la matriz. Tenía en mente algo así como,

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

aunque esto claramente no funciona.

Respuesta

17

Tiene que llamar al numpy.random.shuffle() varias veces porque está barajando varias secuencias de forma independiente. numpy.random.shuffle() funciona en cualquier secuencia mutable y no es en realidad un ufunc. El código más corto y más eficiente para mezclar todas las filas de una matriz bidimensional a separado probablemente es

map(numpy.random.shuffle, a) 
+0

Gracias, solución simple y limpia. – lafras

+0

al menos para python 3.5, numpy 1.10.2, esto no funciona, a permanece sin cambios. – drevicko

+0

@drevicko: ¿Qué dimensión tiene tu matriz? Esta respuesta es para mezclar todas las filas de una matriz bidimensional (y estoy seguro de que también funciona con tu combinación de versiones de Python y Numpy). –

Cuestiones relacionadas