Ä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.

  • Konsekutiv, überlappende Subsets of Array (NumPy, Python)
  • Lösen von Koeffizienten von Datensätzen mit curve_fit von scipy.optimize
  • Einfachste Weg, um mathematische Gleichungen in Python zu lösen
  • Was ist der Unterschied zwischen kmeans und kmeans2 in scipy?
  • Wie bekomme ich Speicher leck in scipy.stats bei der Erzeugung von zufälligen Variablen mit rv_continuous?
  • Markov Kette stationäre Verteilungen mit scipy.sparse?
  • Scipy.optimize.leastsq mit gebundenen Einschränkungen
  • Passende hyperbolische und harmonische Funktionen mit Kurve
  • Pixel Nachbarn in 2d Array (Bild) mit Python
  • Python: Zwei-Kurven-Gauß-Anpassung mit nicht-linearen kleinsten Quadraten
  • Fit eine Gauß-Funktion
  • Python ist die beste Programmiersprache der Welt.