Fügen Sie jedem "anderen" Feld einen Wert hinzu ((i + j)% 2 == 0)

8

Ich habe ein m -by- n numpy-Array und ich möchte 1.0 zu allen Einträgen [i, j] hinzufügen, wenn (i + j) % 2 == 0 , d. h. "zu jedem anderen Quadrat".

Ich könnte natürlich einfach über die Felder iterieren

%Vor%

aber unnötig zu sagen, das ist wirklich langsam.

Irgendeine Idee, wie Sie das verbessern können?

    
Nico Schlömer 05.07.2016, 13:06
quelle

3 Antworten

6

Sie können die Operation leicht in zwei Schritten durchführen, wie

%Vor%     
Nils Werner 05.07.2016, 14:04
quelle
5

Hier ist eine Möglichkeit, NumPy broadcasting -

zu verwenden %Vor%

Erläuterung: Wir erstellen im Grunde zwei Arrays, die den% iteratoren i-th und j-th entsprechen. Nennen wir sie I und J .

%Vor%

Um nun eine Operation zwischen allen möglichen i und j durchzuführen, erstellen wir extend I bis 2D indem Sie seine Elemente in die erste Achse schieben und so eine Singleton-Dimension erzeugen entlang seiner zweiten Achse.

Im übertragenen Sinn könnte die Wirkung des Rundfunks so ausgedrückt werden:

%Vor%

Somit wäre die endgültige Einstellung -

%Vor%

Um es anders auszudrücken, mit dem Ziel zu vermeiden, mit 0 zu vergleichen und direkt mod-2 zu verwenden, was im Wesentlichen 0 oder 1 -

wäre %Vor%

Man kann np.ix_ auch verwenden, um ungerade und dann sogar zu verarbeiten Zeilen zum Setzen, so -

%Vor%     
Divakar 05.07.2016 13:14
quelle
1

Man kann eine Maske für "jedes andere" Element erstellen und die Addition auf die Maske anwenden.

%Vor%     
Nico Schlömer 05.07.2016 13:53
quelle

Tags und Links