2016-04-30 4 views
0

Ich brauche Hilfe bei der Optimierung dieser verschachtelten for-Schleife (Python). Ich dachte daran, die Doppelpunktnotation in numpy auszunutzen, aber alle meine Versuche führen dazu, dass etwas schief läuft.Optimierung von Python-Code mit numpy Doppelpunkt-Notation

import numpy as np 

board = np.random.rand(300, 300) 
for i in range(300): 
     for j in range(300): 
      if (board[i,j] == 0): 
       if (np.random.randint(1000) == 1) : board[i,j] = 1 

Antwort

1

können Sie boolean Indizierung verwenden: board[board == 0] = ..

EDIT: Wenn mehrere boolean Bedingungen kombiniert,

  • Sie einige Klammern benötigen: board[(0 < board) & (board < 1)]. Dies liegt daran, dass bitweise Operatoren (&, | usw.) höhere Priorität haben als Vergleiche.
  • Die Arrays, die Sie für die boolesche Maske kombinieren, müssen untereinander und mit dem Array, das Sie indexieren, zusammengefügt werden können. Ansonsten ist es entweder Fehler oder schlimmer:

    board [(board == 0) & (np.random.randint (100000) == 1)]

nur zieht ein einziger Zufall Nummer aus dem Bereich [0, 100000). Diese einzelne Zeichnung wird dann über das andere Array gesendet.

+0

Hallo, ich habe es versucht: "board [board == 0 & np.random.randint (100000) == 1] = 1' aber es wird nicht funktionieren. – user3408085

+0

Zwei Bugs: eine Syntax, eine böse - siehe bearbeiten. –

+0

Für Zufallszahlen über alle Iterationen, ich denke, Sie müssten: 'np.random.randint (0,1000, board.shape) == 1' stattdessen. – Divakar