Wie füge ich einer Matrix in Numpy einen Wachring hinzu?
Frage
Verwendung Numpy, A Matrix A hat N Zeilen und M -Spalten, und ich möchte einen Schutzring in Matrix A hinzufügen. Dieser Schutzring ist alles Null.
Was soll ich machen? Neuanlage verwenden? Das Element reicht jedoch nicht aus, um eine N+1 m+1 Matrix zu erstellen.
Oder etc.?
Danke im Voraus
Ich meine einen zusätzlichen Ring von Zellen, der immer 0 Surround -Matrix enthält. Gleich wie Matrix A.Lösung
Folgen Sie auf Ihrem Kommentar:
>>> import numpy
>>> a = numpy.array(range(9)).reshape((3,3))
>>> b = numpy.zeros(tuple(s+2 for s in a.shape), a.dtype)
>>> b[tuple(slice(1,-1) for s in a.shape)] = a
>>> b
array([[0, 0, 0, 0, 0],
[0, 0, 1, 2, 0],
[0, 3, 4, 5, 0],
[0, 6, 7, 8, 0],
[0, 0, 0, 0, 0]])
Andere Tipps
Dies ist eine weniger allgemeine, aber leichter zu verstehen Alex 'Antwort:
>>> a = numpy.array(range(9)).reshape((3,3))
>>> a
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> b = numpy.zeros(a.shape + numpy.array(2), a.dtype)
>>> b
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
>>> b[1:-1,1:-1] = a
>>> b
array([[0, 0, 0, 0, 0],
[0, 0, 1, 2, 0],
[0, 3, 4, 5, 0],
[0, 6, 7, 8, 0],
[0, 0, 0, 0, 0]])
Diese Frage ist jetzt alt, aber ich möchte nur die Leute aufmerksam machen, die das finden Numpy hat eine Funktion pad
Das macht dies jetzt sehr leicht.
import numpy as np
a = np.array(range(9)).reshape((3, 3))
a
Out[15]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
a = np.pad(a, pad_width=((1,1),(1,1)), mode='constant', constant_values=0)
a
Out[16]:
array([[0, 0, 0, 0, 0],
[0, 0, 1, 2, 0],
[0, 3, 4, 5, 0],
[0, 6, 7, 8, 0],
[0, 0, 0, 0, 0]])
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow