Schnelles Upsampling von nupy array nach dem nächsten Nachbar Tiling [duplizieren]

8

Ich habe ein 2D-Array mit ganzen Zahlen, das MxN ist, und ich möchte das Array zu (BM) x (BN) erweitern, wobei B ist die Länge einer quadratischen Kachelseite, daher wird jedes Element des Eingabearrays als ein BxB -Block im endgültigen Array wiederholt. Unten ist ein Beispiel mit einer verschachtelten for-Schleife. Gibt es einen schnelleren / eingebauten Weg?

%Vor%

Ergebnis ...

%Vor%     
mlh3789 29.09.2015, 14:37
quelle

3 Antworten

11

Eine Option ist

%Vor%

Dies ist etwas verschwenderisch aufgrund der Zwischen-Array, aber es ist zumindest prägnant.

    
YXD 29.09.2015, 14:40
quelle
11

Hier ist ein potentiell schneller Weg mit Schritttricks und Umformung:

%Vor%

Die zugrunde liegenden Daten in a werden kopiert, wenn reshape aufgerufen wird. Daher gibt diese Funktion keine Ansicht zurück. Im Vergleich zur Verwendung von repeat entlang mehrerer Achsen sind jedoch weniger Kopiervorgänge erforderlich.

Die Funktion kann dann wie folgt verwendet werden:

%Vor%

Nun, für kleine Blöcke ist diese Methode etwas langsamer als die Verwendung von repeat , aber schneller als kron .

Für etwas größere Blöcke wird es jedoch schneller als andere Alternativen. Verwenden Sie zum Beispiel eine Blockform von (20, 20) :

%Vor%

Die Lücke zwischen den Methoden nimmt mit zunehmender Blockgröße zu.

Auch wenn a ein großes Array ist, kann es schneller sein als Alternativen:

%Vor%     
Alex Riley 29.09.2015 15:45
quelle
3

Wahrscheinlich nicht der Schnellste, aber ..

%Vor%

Es macht das Kronecker-Produkt , es handelt sich also um eine Multiplikation für jedes Element in der Ausgabe.

    
user2379410 29.09.2015 14:53
quelle

Tags und Links