Tengo una matriz 2D muy grande que se parece a esto:
a=
[[a1, b1, c1],
[a2, b2, c2],
...,
[an, bn, cn]]
Usando numpy, ¿hay una manera fácil de obtener una nueva matriz 2D con, por ejemplo, 2 filas aleatorias de la matriz inicial a
(sin reemplazo)?
p.ej
b=
[[a4, b4, c4],
[a99, b99, c99]]
Respuestas:
Poniéndolo junto para un caso general:
Para no reemplazo (numpy 1.7.0+):
No creo que haya una buena manera de generar una lista aleatoria sin reemplazo antes de 1.7. Quizás pueda configurar una pequeña definición que garantice que los dos valores no sean iguales.
fuente
np.random.choice
, y es que ennp.random.permutation(A.shape[0])[:2]
realidad no es genial, pero eso es lo que haynp.random.choice
en este momento ... o si no le importa cambiar su matriz en lugar,np.random.shuffle
Esta es una publicación antigua, pero esto es lo que funciona mejor para mí:
cambie el replace = False a True para obtener lo mismo, pero con reemplazo.
fuente
replace=False
parámetro agregado achoice
.Otra opción es crear una máscara aleatoria si solo desea reducir la muestra de datos por un determinado factor. Digamos que quiero reducir la muestra al 25% de mi conjunto de datos original, que actualmente se encuentra en la matriz
data_arr
:Ahora puede llamar
data_arr[mask]
y devolver ~ 25% de las filas, muestreadas al azar.fuente
Esta es una respuesta similar a la que proporcionó Hezi Rasheff, pero simplificada para que los usuarios más nuevos de Python entiendan lo que está sucediendo (noté que muchos nuevos estudiantes de ciencia de datos obtienen muestras aleatorias de la manera más extraña porque no saben lo que están haciendo en Python).
Puede obtener varios índices aleatorios de su matriz utilizando:
Luego puede usar el corte en rebanadas con su matriz numpy para obtener las muestras en esos índices:
Esto le dará el número especificado de muestras aleatorias de sus datos.
fuente
Veo que se ha sugerido la permutación. De hecho, se puede convertir en una línea:
fuente
Si necesita las mismas filas pero solo una muestra aleatoria, entonces,
Aquí x, tiene que ser un 'int' que define el número de filas que desea elegir al azar.
fuente
old_array
es una secuencia o un conjunto, no una matriz numpy [enlace] ( docs.python.org/3/library/random.html#functions-for-sequences )Si desea generar múltiples subconjuntos aleatorios de filas, por ejemplo, si está haciendo RANSAC.
fuente