Domanda

NumPy , una matrice A ha n righe em colonne, e voglio aggiungere un anello di guardia alla matrice A. Tale anello di guardia è tutto a zero.

Che cosa devo fare? Utilizzare Reshape? Ma l'elemento non è sufficiente per fare un n + 1 m + 1 matrice.

o ecc.?

Grazie in anticipo

Intendo un anello supplementare di celle che contengono sempre 0 surround a matrice A.Basically c'è una matrice B ha n + m + 2Rows 2columns cui la prima riga e colonne e l'ultima riga e colonne sono tutti a zero, e il resto sono stessa matrice A.
È stato utile?

Soluzione

In seguito sul commento :

>>> 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]])

Altri suggerimenti

Questa è una meno generale ma più facile da capire versione di Alex risposta :

>>> 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]])

Questa domanda è antica ora, ma voglio solo avvisare le persone che trovano è che NumPy ha una funzione di pad che compie molto facilmente questo momento.

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]])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top