Ändern der Struktur des numpy Arrays, das den gegebenen Wert erzwingt

Wie kann ich die Raster-Daten von 4 X 6 Größe in 2 X 3 Größe erzwingen '1', um gewählt werden, wenn ein Element mit in 2 * 2 Pixel enthalten 1, sonst 0?

 import numpy as np data=np.array([ [0,0,1,1,0,0], [1,0,0,1,0,0], [1,0,1,0,0,0], [1,1,0,0,0,0]]) 

Das Ergebnis sollte sein:

 result = np.array([ [1,1,0], [1,1,0]]) 

2 Solutions collect form web for “Ändern der Struktur des numpy Arrays, das den gegebenen Wert erzwingt”

Sie könnten die Patch-Extraktion Routine von scikit lernen wie folgt (Sie sollten in der Lage zu kopieren und einfügen):

 from sklearn.feature_extraction.image import extract_patches data = np.array([[0, 0, 1, 1, 0, 0], [1, 0, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0]]) patches = extract_patches(data, patch_shape=(2, 2), extraction_step=(2, 2)) non_zero_count_patches = (patches > 0).any(axis=-1).any(axis=-1).astype(int) print non_zero_count_patches 

Erläuterung : Die Funktion extract_patches erzeugt eine Ansicht auf dein Array, die Schiebepatches der Größe patch_shape und des Diskretisierungsschrittes extraction_step , die du je nach Wunsch variieren kannst. Die folgende Zeile prüft, welche der Patches einen Nicht-Nullpunkt enthält. Allerdings kann dies durch irgendetwas anderes ersetzt werden, das Sie interessieren können, wie das Mittel, Summe, etc. Ein Vorteil ist, dass Sie Patch-Größe und Extraktion Schritt frei wählen können (sie müssen nicht entsprechen), ohne Speicher Overhead bis any wird aufgerufen (es verwendet schritte intern).

 import numpy as np def toblocks(arr, nrows, ncols): h, w = arr.shape blocks = (arr.reshape(h // nrows, nrows, -1, ncols) .swapaxes(1, 2) .reshape(h // nrows, w // ncols, ncols * nrows)) return blocks data = np.array([[0, 0, 1, 1, 0, 0], [1, 0, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 0, 0, 0]]) blocks = toblocks(data, 2, 2) downscaled = blocks.any(axis=-1).astype(blocks.dtype) print(downscaled) # [[1 1 0] # [1 1 0]] 

Woher kommt die obige Lösung: Vor einer Weile fragte eine SO-Frage , wie man ein Array in Blöcke zerbricht. Alles, was ich tat, war etwas modifiziert, dass Lösung, um any auf jeden der Blöcke gelten.

  • Schnelles Berechnen von Eigenvektoren für jedes Element eines Arrays in Python
  • Plotten von Orbitaltrajektorien in Python
  • Warum ist scipy.ndimage.io.imread return PngImageFile, kein Array von Werten
  • Matplotlib 2D Scheibe von 3D Daten
  • Python endliche Differenzfunktionen?
  • Orthogonale Distanzregression in Python: Bedeutung der zurückgegebenen Werte
  • Python / Numba: Unbekannter Attributfehler mit scipy.special.gammainc ()
  • Scipy ndimage Messetikettierung funktioniert nicht richtig
  • Wie man eine Funktion mit diskreten Variablenwerten in scipy minimiert
  • Ctrl-C stürzt Python nach dem Import von scipy.stats ab
  • Diagonale Matrix einer Matrix mit numpy und scipy
  • Python ist die beste Programmiersprache der Welt.