Necesito una muestra, sin reemplazo, de todas las posibles tuplas de números de range(n)
. Es decir, tengo una colección de (0,0), (0,1), ..., (0, n), (1,0), (1,1), ..., (1, n), ..., (n, 0), (n, 1), (n, n), y estoy tratando de obtener una muestra de k de esos elementos. Espero evitar construir explícitamente esta colección.python: muestreo sin reemplazo desde una cuadrícula 2D
Sé random.sample(range(n), k)
es simple y eficiente si necesitaba una muestra de una secuencia de números en lugar de tuplas de números.
Por supuesto, puedo construir explícitamente la lista que contiene todas las tuplas posibles (n * n = n^2
), y luego llamar al random.sample
. Pero eso probablemente no sea eficiente si k
es mucho más pequeño que n^2
.
No estoy seguro si las cosas funcionan igual en Python 2 y 3 en términos de eficiencia; Yo uso Python 3.
Las tuplas son secuencias, por lo que su frase "necesita una muestra de una secuencia de números en lugar de tuplas de números." no tiene sentido. ¿Quiere decir que necesita una muestra de una secuencia de tuplas? No está claro en ese caso cómo se ven estas tuplas. –
Su código ('random.sample (range (n), k)' funciona y es correcto para todas las secuencias, tuplas, listas, cadenas y cualquier subclase de 'collections.Sequence'. ¿Intentó su código todavía? ¿Cuál es la pregunta? ? –
@Regebro: 'una muestra de tuplas' = 'una muestra de k tuplas de una secuencia de n tuplas'. 'una muestra de una secuencia' = 'una muestra de k elementos de una secuencia de n elementos'. Voy a editar la pregunta para aclarar. @ S.Lott: lo que quise decir es que no puedo referirme a una secuencia ((0,0), (0,1), (0,2), (1,0), (1,1) , (1,2), (2,0), (2,1), (2,2)) como un simple 'rango' en el que simplemente puedo aplicar 'sample'. – max