2017-10-13 5 views
0

J'ai une matrice numpy qui est aléatoire peuplé avec des zéros et ceux:Sélection position aléatoire dans la matrice numpy

grid = np.random.binomial(1, 0.2, size = (3,3)) 

Maintenant, je dois prendre une position aléatoire à l'intérieur de cette matrice et tourner à 2

J'ai essayé:

pos = int(np.random.randint(0,len(grid),1)) 

Mais alors j'obtiens une rangée entière remplie de 2s. Comment puis-je choisir une seule position aléatoire? Merci

+3

Sélectionnez une position aléatoire ou une position aléatoire qui est aussi 1 ou une position aléatoire qui est aussi 0? Pour le premier faire simplement: 'np.put (grille, np.random.choice (grille.size), 2)'. – Divakar

+0

Toute position aléatoire. Votre solution fonctionne. Je vous remercie. – nattys

Répondre

2

Le problème avec votre code est que vous ne demandez qu'une seule valeur aléatoire pour les indices au lieu de deux nombres aléatoires (aléatoires). Cette une façon d'atteindre votre objectif:

# Here is your grid 
grid = np.random.binomial(1, 0.2, size=(3,3)) 

# Request two random integers between 0 and 3 (exclusive) 
indices = np.random.randint(0, high=3, size=2) 

# Extract the row and column indices 
i = indices[0] 
j = indices[1] 

# Put 2 at the random position 
grid[i,j] = 2 
+0

Votre solution m'a aidé à résoudre un autre problème dans mon code que je n'avais aucune idée était lié au manque d'indices. Merci beaucoup – nattys