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.
War es hilfreich?

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
scroll top