Почему форма многомерных массивов обрабатывается по-разному в numpy при использовании параметра оси - PullRequest
1 голос
/ 04 мая 2020

Я ладья ie на языке python и у меня вопрос относительно формы массивов. Насколько я понимаю, если 3-мерный массив numpy создается как этот temp = numpy.asarray([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4], [5, 5, 5]], [[6, 6, 6], [7, 7, 7], [8, 8, 8]]]), форма создается, как на следующем рисунке: форма 3-мерного массива Для вычисления суммы, median et c. ось может быть определена для вычисления значений, например,

>>> print(numpy.median(temp, axis=0))
[[3. 3. 3.] [4. 4. 4.] [5. 5. 5.]]
>>> print(numpy.median(temp, axis=1))
[[1. 1. 1.] [4. 4. 4.] [7. 7. 7.]]
>>> print(numpy.median(temp, axis=2))
[[0. 1. 2.] [3. 4. 5.] [6. 7. 8.]]

, что подразумевает для меня форму, подобную этой форма 3-мерного массива с использованием параметра оси Почему форма обрабатывается по-разному при вычислении sum, median et c. с параметром оси?

1 Ответ

1 голос
/ 05 мая 2020

Ваш numpy массив temp = numpy.asarray([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4], [5, 5, 5]], [[6, 6, 6], [7, 7, 7], [8, 8, 8]]]) на самом деле выглядит так:

     axis=2
       |
       v
[[[0 0 0]  <-axis=1
  [1 1 1]
  [2 2 2]] <- axis=0

 [[3 3 3]
  [4 4 4]
  [5 5 5]]

 [[6 6 6]
  [7 7 7]
  [8 8 8]]]

Следовательно, когда вы берете медианное значение по указанной оси c, numpy сохраняет остальную часть оси как есть и находит медианное значение по указанной оси. Чтобы лучше понять, я собираюсь использовать предложенный массив в комментариях @hpaulj:

temp:

     axis=2
       |
       v
[[[ 0  1  2  3] <-axis=1
  [ 4  5  6  7]
  [ 8  9 10 11]] <- axis=0

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

Затем мы имеем:

numpy.median(temp, axis=0):

#The first element is median of [0,12], second one median of [1,13] and so on.
[[ 6.  7.  8.  9.]
 [10. 11. 12. 13.]
 [14. 15. 16. 17.]]


np.median(temp, axis=1)

#The first element is median of [0,4,8], second one median of [1,5,9] and so on.
[[ 4.  5.  6.  7.]
 [16. 17. 18. 19.]]


np.median(temp, axis=2)

#The first element is median of [0,1,2,3], second one median of [4,5,6,7] and so on.
[[ 1.5  5.5  9.5]
 [13.5 17.5 21.5]]
...