Pregunta

Uso NumPy , una matriz A tiene n filas y m columnas, y quiero añadir un anillo de guarda a la matriz A. Ese anillo de guarda es todos cero.

¿Qué debo hacer? Utilice Reshape? Pero el elemento no es suficiente para hacer a + 1 m + 1 de la matriz n.

O, etc.?

Gracias de antemano

Me refiero a un anillo adicional de las células, que siempre contienen 0 matriz envolvente A.Basically existe una matriz B tiene n + m 2Rows 2columns + en la primera fila y columnas y la última fila y columnas son todos cero, y el resto son mismo como matriz A.
¿Fue útil?

Solución

El seguimiento de su comentario :

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

Otros consejos

Este es un menos general pero más fácil de entender versión de de Alex respuesta :

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

Esta pregunta es antigua, pero sólo quiero alertar a la gente para encontrar lo que numpy tiene una función pad que lleva a cabo muy fácilmente esto ahora.

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]])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top