Посчитать mean в Numpy игнорируя 0
у меня есть три массива np.array: одномерный, двухмерный и трехмерный. в каждом массиве есть значения от 0 до 4. необходимо посчитать средние mean (в том числе и с axis), но с условием, что 0-ые значения игнорируются при подсчете среднего
train_1 = np.random.randint(0,4*10+1,12)
array([17, 28, 9, 0, 39, 31, 28, 19, 13, 9, 5, 20])
train_1.sum(),round(train_1.mean(),1)
(218, 18.2)
train_2 = np.random.randint(0,4+1,12*10).reshape(12,-1)
array([[2, 1, 4, 4, 1, 3, 4, 2, 2, 0],
[4, 0, 4, 3, 3, 4, 3, 3, 4, 1],
[2, 3, 1, 1, 0, 0, 4, 0, 1, 3],
[1, 4, 3, 0, 2, 3, 4, 1, 4, 1],
[1, 2, 3, 2, 4, 2, 0, 0, 0, 4],
[4, 1, 2, 3, 3, 1, 3, 4, 4, 3],
[3, 3, 2, 4, 3, 1, 2, 3, 2, 3],
[1, 1, 0, 1, 3, 4, 3, 0, 1, 4],
[2, 0, 3, 0, 1, 0, 4, 0, 1, 4],
[4, 1, 0, 3, 1, 4, 1, 3, 4, 0],
[4, 2, 0, 4, 2, 4, 2, 4, 4, 2],
[2, 4, 1, 3, 4, 2, 4, 4, 0, 2]])
train_3 = np.random.randint(0,2+1,12*10*2).reshape(2,12,10)
array([[[1, 1, 0, 0, 0, 2, 1, 1, 2, 0],
[2, 1, 2, 1, 1, 0, 0, 1, 0, 0],
[2, 0, 2, 2, 1, 2, 1, 2, 0, 2],
[1, 0, 2, 1, 2, 2, 1, 0, 2, 0],
[1, 1, 2, 0, 0, 2, 0, 0, 2, 1],
[2, 1, 1, 1, 0, 2, 1, 1, 1, 0],
[0, 0, 2, 2, 0, 1, 0, 1, 2, 2],
[1, 0, 0, 1, 1, 2, 0, 1, 2, 0],
[1, 0, 1, 2, 1, 1, 0, 0, 0, 0],
[2, 2, 2, 0, 2, 0, 2, 2, 2, 1],
[2, 2, 2, 1, 0, 2, 0, 1, 2, 0],
[1, 1, 1, 0, 2, 1, 0, 1, 2, 1]],
[[1, 1, 1, 2, 1, 2, 1, 2, 1, 2],
[0, 2, 0, 1, 1, 2, 2, 1, 2, 2],
[1, 2, 1, 0, 0, 2, 2, 1, 0, 1],
[1, 1, 1, 0, 2, 1, 0, 2, 0, 1],
[2, 1, 0, 0, 0, 0, 2, 0, 1, 2],
[0, 0, 1, 0, 2, 1, 1, 0, 0, 0],
[0, 2, 1, 2, 1, 0, 1, 1, 0, 1],
[2, 0, 2, 0, 1, 1, 2, 1, 2, 1],
[2, 2, 0, 1, 0, 1, 0, 0, 0, 0],
[1, 2, 1, 0, 0, 2, 1, 0, 0, 0],
[1, 0, 2, 2, 0, 2, 1, 2, 0, 2],
[0, 1, 1, 1, 1, 2, 0, 0, 2, 2]]])
как можно заметить, mean учитывает и 0-ые значения. а я бы хотел игнорировать 0 при подсчете. может быть есть какой-то метод? или нужно через маску создать новый массив? но тогда пропадет кол-во измерений, не? или через фильтр лямбда?