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?
Sie können die Operation leicht in zwei Schritten durchführen, wie
%Vor% Hier ist eine Möglichkeit, NumPy broadcasting
-
Erläuterung: Wir erstellen im Grunde zwei Arrays, die den% iteratoren i-th
und j-th
entsprechen. Nennen wir sie I
und J
.
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
-
Man kann np.ix_
auch verwenden, um ungerade und dann sogar zu verarbeiten Zeilen zum Setzen, so -
Man kann eine Maske für "jedes andere" Element erstellen und die Addition auf die Maske anwenden.
%Vor%