Расчет среднего по нескольким осям - PullRequest
0 голосов
/ 17 июня 2019

Предположим,

inp = np.random.randint(1,500,size=(1, 2, 5, 5))

Вывод:

array([[[[ 58, 223, 150, 287,  56],
         [ 59,  19, 436, 441, 299],
         [194,  79, 133,  19, 113],
         [242, 497, 494,  54,   6],
         [ 57, 382, 123, 114,  40]],

        [[170, 482, 464,  78, 429],
         [ 97, 445, 129, 319, 181],
         [370, 413, 304, 177, 215],
         [  4, 279, 366,  66,  65],
         [260, 375, 492, 282, 277]]]])

А теперь, если я сделаю

np.sum(inp,axis=(2,3))

, я получу

array([[4575, 6739]])

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

1 Ответ

1 голос
/ 18 июня 2019

Вместо того, чтобы пытаться использовать последовательность случайных целых чисел, чтобы выяснить, что происходит, я обычно рекомендую создать шаблон для тестирования.

shp = (1, 2, 3, 4)

a = np.arange(np.prod(shp)).reshape(shp)

a
Out[3]: 
array([[[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7],
         [ 8,  9, 10, 11]],

        [[12, 13, 14, 15],
         [16, 17, 18, 19],
         [20, 21, 22, 23]]]])

np.mean(a, axis=(0,1))
Out[4]: 
array([[ 6.,  7.,  8.,  9.],
       [10., 11., 12., 13.],
       [14., 15., 16., 17.]])

np.mean(a, axis=(1,2))
Out[5]: array([[10., 11., 12., 13.]])

np.mean(a, axis=(2,3))
Out[6]: array([[ 5.5, 17.5]])

Оттуда вы можете удалить ось, которая может сбить с толку то, что вы ожидаете, и пересмотреть

a = a.squeeze()

np.mean(a, axis=(0,1))
Out[8]: array([10., 11., 12., 13.])

np.mean(a, axis=(1,2))
Out[9]: array([ 5.5, 17.5])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...