Как правильно numpy.nanmean и ключевое слово оси на трехмерных массивах? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть массив NumPy формы (3,16,110).Я хочу взять каждый элемент в каждом (16,110) массиве и усреднить его с двумя другими элементами в оставшихся 2 (16,110) массивах.Результирующий массив должен иметь размеры (16,110).

Чтобы показать, что я имею в виду с меньшими массивами (2,3), например:

a= [(0, 2, nan),
    (1, 3, 1)  ]

b = [(1, 3, 2),
     (3, 4, 7)]

c = [(nan, 5, 2),
     (1, 3, 2)]

Я хочу создать массив с измерениями (2,3) беря сначала среднее значение (0,1,nan), затем переходя к следующему элементу (2,3,5) и т. Д. *

Так что правильный способ сделать это и принять во внимание nan, это использоватьnp.nanmean(3darray, axis=0)?Я не совсем понимаю ключевое слово axis, я был бы признателен, если бы кто-то смог объяснить :)

1 Ответ

0 голосов
/ 05 октября 2018

Попробуйте это:

import numpy as np

a= [(0, 2, np.NaN),
   ...:     (1, 3, 1)  ]
   ...: 
   ...: b = [(1, 3, 2),
   ...:      (3, 4, 7)]
   ...: 
   ...: c = [(np.NaN, 5, 2),
   ...:      (1, 3, 2)]


d=[a,b,c,b]

np.array(d).shape

>>(4, 2, 3)

np.nanmean(d,axis=0) #removes the first axis

>>array([[0.66666667, 3.25      , 2.        ],
       [2.        , 3.5       , 4.25      ]])

np.nanmean(d,axis=0).shape

>>(2, 3)

np.nanmean(d,axis=1) #removes the second axis

>>array([[0.5, 2.5, 1. ],
       [2. , 3.5, 4.5],
       [1. , 4. , 2. ],
       [2. , 3.5, 4.5]])

np.nanmean(d,axis=1).shape

>>(4, 3)

np.nanmean(d,axis=2) #removes the third axis

>>array([[1.        , 1.66666667],
       [2.        , 4.66666667],
       [3.5       , 2.        ],
       [2.        , 4.66666667]])

np.nanmean(d,axis=2).shape

>>(4, 2)

Ключевое слово axis указывает, по какой оси вы будете вычислять.Другими словами, указанная ось будет удалена путем усреднения.

Итак, что вам конкретно нужно, это np.nanmean(d,axis=0).

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