Я использую np.pad для заполнения массива 4d
a = np.zeros((2,2,2,2))
a = a+7
apad = np.pad(a,((0,0),(0,0),(1,1),(1,1)),'constant')
Он дополняет каждый 2d-массив строкой и столбцом нулей. Я не уверен, как работает этот np.pad, особенно второй параметр функции. Я также пытался понять это с помощью более простого массива, это тоже не ясно.
a = np.arange(20)
a = np.reshape(a,(4,5))
a = np.pad(a,((1,0)),'constant')
print(a)
>>>[[ 0 0 0 0 0 0]
[ 0 0 1 2 3 4]
[ 0 5 6 7 8 9]
[ 0 10 11 12 13 14]
[ 0 15 16 17 18 19]]
Кто-нибудь может кратко объяснить, как работает второй параметр в np.pad()?
Второй параметр сообщает, насколько значение заполнения будет дополнено по каждой оси. Поскольку вы указали ((1, 0))
, каждая ось будет дополнена один раз в начале и 0 раз в конце. Попробуйте np.pad(a,((1, 0), (0, 1)),'constant')
Думаю, это поможет прояснить это.
В двумерном массиве есть 4 стороны, которые можно заполнить. Посмотрите, например, на np.pad(np.arange(1,5).reshape(2,2), ((1,2),(3,4)))
Начнем со второго примера (двумерный массив).
Когда вы запускаете np.pad(a, (1,0), 'constant')
, тогда (1,0) означает:
Результат таков:
и, следовательно, результат:
array([[ 0, 0, 0, 0, 0, 0],
[ 0, 0, 1, 2, 3, 4],
[ 0, 5, 6, 7, 8, 9],
[ 0, 10, 11, 12, 13, 14],
[ 0, 15, 16, 17, 18, 19]])
А теперь посмотрите на свой первый пример. Давайте создадим ваш массив также типа int:
a = np.zeros((2,2,2,2), dtype=int)
a = a + 7
Затем, когда вы бежите apad = np.pad(a, ((0,0),(0,0),(1,1),(1,1)), 'constant')
, тогда:
Итак, результат:
array([[[[0, 0, 0, 0],
[0, 7, 7, 0],
[0, 7, 7, 0],
[0, 0, 0, 0]],
[[0, 0, 0, 0],
[0, 7, 7, 0],
[0, 7, 7, 0],
[0, 0, 0, 0]]],
[[[0, 0, 0, 0],
[0, 7, 7, 0],
[0, 7, 7, 0],
[0, 0, 0, 0]],
[[0, 0, 0, 0],
[0, 7, 7, 0],
[0, 7, 7, 0],
[0, 0, 0, 0]]]])
Отличное объяснение, теперь я понимаю, как это работает. Большое спасибо!
Вы видели документы? numpy.org/doc/stable/reference/generated/numpy.pad.html