Pergunta

Usando Numpy, uma matriz A tem n linhas e M colunas, e eu quero adicionar um anel de guarda à matriz A. Esse anel de guarda é todo zero.

O que devo fazer? Usar remodelamento? Mas o elemento não é suficiente para fazer uma matriz n+1 m+1.

Ou etc.?

desde já, obrigado

Quero dizer, um anel extra de células que sempre contêm 0 matriz surround A.Basicamente, existe uma matriz b tem n+2rows m+2 colunas onde a primeira linha e colunas e a última linha e colunas são todas zero, e o restante é O mesmo que Matrix A.
Foi útil?

Solução

Seguindo o seu Comente:

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

Outras dicas

Esta é uma versão menos geral, mas mais fácil de entender Resposta de 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]])

Esta pergunta é antiga agora, mas eu só quero alertar as pessoas que estão descobrindo que Numpy tem uma função pad Isso é facilmente facilmente realizado agora.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top