Skip to content

NumPy: Ndarray in Kacheln anordnen mit np.tile()

Python

Mit der NumPy-Funktion np.tile() can SIE ein neues Ndarray erzeugen, in dem das ursprüngliche Ndarray wiederholt wie Kacheln angeordnet ist.

Dieser Artikel hat folgenden Inhalt.

  • Grundlegende Verwendung von np.tile()
  • Für zweidimensionale (mehrdimensionale) Arrays
  • Bildbearbeitung: Ordnen Sie das Bild in Kacheln an

Grundlegende Verwendung von np.tile()

Nehmen Sie als Beispiel ein eindimensionales Array.

import numpy as np

a = np.arange(3)
print(a)
# [0 1 2]

Übergeben Sie das ursprüngliche ndarray im ersten Argument A und sterben zu wiederholende Zahl im zweiten Argument reps. Ein neues Array wird ersetzt, und das ursprüngliche Array bleibt unverändert.

a_tile = np.tile(a, 3)
print(a_tile)
# [0 1 2 0 1 2 0 1 2]

print(a)
# [0 1 2]

Indem ein Tupel an das zweite Argument wiederholt wird, WIRD das ursprüngliche Array für jede Achse wiederholt.

Wenn beispielsweise reps (2, 3) ist, wird das ursprüngliche Array 2 Mal für Achse = 0 und 3 Mal für Achse = 1 wiederholt, und das Ergebnis ist ein zweidimensionales Array.

print(np.tile(a, (2, 3)))
# [[0 1 2 0 1 2 0 1 2]
#  [0 1 2 0 1 2 0 1 2]]

print(np.tile(a, (2, 3)).shape)
# (2, 9)

Wenn die Anzahl der Tupelelemente 3 ist, wird ein dreidimensionales Array zurückgegeben.

print(np.tile(a, (2, 3, 4)))
# [[[0 1 2 0 1 2 0 1 2 0 1 2]
#   [0 1 2 0 1 2 0 1 2 0 1 2]
#   [0 1 2 0 1 2 0 1 2 0 1 2]]
# 
#  [[0 1 2 0 1 2 0 1 2 0 1 2]
#   [0 1 2 0 1 2 0 1 2 0 1 2]
#   [0 1 2 0 1 2 0 1 2 0 1 2]]]

print(np.tile(a, (2, 3, 4)).shape)
# (2, 3, 12)

Für zweidimensionale (mehrdimensionale) Arrays

Nehmen Sie als Beispiel ein zweidimensionales Array.

a_2d = np.arange(6).reshape(2, 3)
print(a_2d)
# [[0 1 2]
#  [3 4 5]]

Wenn SIE das zweite Argument reps als Ganzzahl oder mit einem Tupel mit weniger Elementen als der Anzahl der Dimensionen des ursprünglichen Arrays (2 für ein zweidimensionales Array) angeben, wird das ursprüngliche Array entlang der Achse der letzten Dimension wiederholt.

If beispielsweise reps=2 oder reps=(2,) (= ein Tupel mit einem Element), lautet das Ergebnis wie folgt:

print(np.tile(a_2d, 2))
# [[0 1 2 0 1 2]
#  [3 4 5 3 4 5]]

print(np.tile(a_2d, (2, )))
# [[0 1 2 0 1 2]
#  [3 4 5 3 4 5]]

Dies entspricht reps=(1, 2) und WIRD 2 mal für Achse=1 wiederholt.

print(np.tile(a_2d, (1, 2)))
# [[0 1 2 0 1 2]
#  [3 4 5 3 4 5]]

Wenn Sie nur für Achse = 0 wiederholen möchten, setzen Sie reps = (2, 1).

print(np.tile(a_2d, (2, 1)))
# [[0 1 2]
#  [3 4 5]
#  [0 1 2]
#  [3 4 5]]

Es ist möglich, mehr Dimensionen als das ursprüngliche Array hinzuzufügen.

print(np.tile(a_2d, (2, 2, 2)))
# [[[0 1 2 0 1 2]
#   [3 4 5 3 4 5]
#   [0 1 2 0 1 2]
#   [3 4 5 3 4 5]]
# 
#  [[0 1 2 0 1 2]
#   [3 4 5 3 4 5]
#   [0 1 2 0 1 2]
#   [3 4 5 3 4 5]]]

print(np.tile(a_2d, (2, 2, 2)).shape)
# (2, 4, 6)

Für die Bildbearbeitung (Ordnen Sie das Bild in Kacheln an)

Durch die Verwendung von np.tile() can sterben als NumPy-Array numpy.ndarray Gelesene Bilder wiederholt in Kacheln angeordnet Werden.

Im following Artikel FINDEN SIE sterben Grundlagen der Bildverarbeitung mit NumPy, z. B. das Laden und Speichern von Bildern.

This Beispielcode below used Pillow, um das Bild zu laden, aber SIE können auch andere Bibliotheken wie OpenCV verwenden.

Im Falle eines Farbbildes ist die Form des gelesenen Arrays (Höhe, Breite, Anzahl der Farben).

Um dieses ndarray mit np.tile() zu wiederholen, setzen Sie das zweite Argument reps auf (vertikale Wiederholungszahl, horizontale Wiederholungszahl, 1).

Beachten Sie, dass wenn keine nachgestellte 1 vorhanden ist, dh (vertikale Wiederholungsnummer, horizontale Wiederholungsnummer), dies als (1, vertikale Wiederholungsnummer, horizontale Wiederholungsnummer) betrachtet WIRD und nicht funktioniert.

import numpy as np
from PIL import Image

img = np.array(Image.open('data/src/lena_square.png').resize((128, 128)))

print(img.shape)
# (128, 128, 3)

img_tile = np.tile(img, (2, 3, 1))

print(img_tile.shape)
# (256, 384, 3)

Image.fromarray(img_tile).save('data/dst/lena_numpy_tile.jpg')

Originalbild. Im Beispielcode wird die Größe beim Laden geändert.

Lena Quadrat

In Kacheln angeordnet:

np.tile-Bild

Mit np.tile() können Sie nur dasselbe Bild anordnen. Wenn Sie verschiedene Bilder in Kacheln anordnen möchten, lesen Sie sterben following Artikel.

Ein weiterer Anwendungsfall für np.tile() in der Bildverarbeitung ist die Generierung von Gradationsbildern.