Question

Utilisation NumPy , une matrice A a n lignes et m colonnes, et je veux ajouter un anneau de garde à la matrice A. Cet anneau de garde est tout à zéro.

Que dois-je faire? Utilisez Reshape? Mais l'élément ne suffit pas de faire un n + 1 m + 1 matrice.

Ou etc.?

Merci d'avance

Je veux dire un cycle supplémentaire de cellules qui contiennent toujours 0 matrice surround A.Basically il y a une chambre de matrice a n + 2rows m + 2columns où la première rangée et des colonnes et la dernière rangée et des colonnes sont tous égaux à zéro, et le reste de celui-ci sont même que matrice A.
Était-ce utile?

La solution

Faisant suite à votre commentaire :

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

Autres conseils

Ceci est un moins grand mais plus facile à comprendre la version de réponse d'Alex :

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

Cette question est ancienne, mais je veux juste avertir les gens à trouver ce que numpy a une fonction qui accomplit pad très facilement maintenant.

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]])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top