Dado um array Numpy 2D, gostaria de poder preenchê-lo nos lados esquerdo, direito, superior e inferior, como o pseudocódigo a seguir. Já existe algo assim integrado ao Numpy?
import numpy as np
a = np.arange(16).reshape((4, 4))
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
pad(a)[-4:2, -1:3] # or any syntax giving the same result
#[[0 0 0 0]
# [0 0 0 0]
# [0 0 0 0]
# [0 0 0 0]
# [0 0 1 2]
# [0 4 5 6]]
pad(a)[-4:2, -1:6]
#[[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 0 0 0]
# [0 0 1 2 3 0 0]
# [0 4 5 6 7 0 0]]
Alguns truques:
Teste:
Você pode definir uma matriz de zeros do tamanho correto e depois copiar a fatia da sua matriz:
AFAIK, não há como usar a sintaxe da fatia
pad(a, -4:2, -1:6)
fora de uma operação de indexação, mas esta função permite especificar as fatias como tuplas, o que acho que é próximo o suficiente da sintaxe desejadaVocê não pode usar o fatiamento para isso, os números negativos têm um significado diferente em uma fatia.
Você teria que usar
pad
:Abordagem genérica usando uma função: