Zero pad ndarray вдоль оси - PullRequest
1 голос
/ 10 мая 2019

Я хочу набить:

[[1, 2]
 [3, 4]]

до

[[0, 0, 0]
 [0, 1, 2]
 [0, 3, 4]]

У меня нет проблем с этим, когда ввод является 2D с помощью vstack & hsrack

Однако, когда я добавляю 1 тусклый, чтобы представить тусклый номер, такой как:

img = np.random.randint(-10, 10, size=(2, 2, 2))

Я не могу сделать это, если я не хотел бы использовать для цикла. Можно ли как-нибудь избежать этого, кроме стека numpy?

ps: для этого примера я должен получить массив (2,3,3) для каждого 2-го экземпляра img, равный нулю в 1-м столбце и 1-й строке.

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

Можно использовать np.pad, что позволяет указать количество значений, добавленных к краям каждой оси.

Итак, для первого примера 2D массив вы можете сделать:

a = np.array([[1, 2],[3, 4]])
np.pad(a,((1, 0), (1, 0)), mode = 'constant')

array([[0, 0, 0],
       [0, 1, 2],
       [0, 3, 4]])

Таким образом, здесь каждый кортеж представляет сторону, которая дополняется нулями вдоль каждой оси, т.е. ((before_1, after_1), … (before_N, after_N)).


И для массива 3D применяется то же самое, но в этом случае мы должны указать, что мы хотим только zero дополнить два последних измерения:

img = np.random.randint(-10, 10, size=(2, 2, 2))
np.pad(img, ((0,0), (1,0), (1,0)), 'constant')

array([[[ 0,  0,  0],
        [ 0, -3, -2],
        [ 0,  9, -5]],

       [[ 0,  0,  0],
        [ 0,  1, -9],
        [ 0, -1, -3]]])
1 голос
/ 10 мая 2019

Вы можете использовать np.pad и удалить последнюю строку / столбец:

import numpy as np

a = np.array([[1, 2], [3, 4]])
result = np.pad(a, 1, mode='constant', constant_values=0)[:-1, :-1]
print(result)

Выход:

[[0 0 0]
 [0 1 2]
 [0 3 4]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...