Вы можете подать данные в массив с масками, а затем вычислить средние значения с помощью np.ma.mean
:
import numpy as np
import itertools
data=[[1,2,3],[1,2,3],[1,2,3,4]]
rows=len(data)
cols=max(len(row) for row in data)
arr=np.ma.zeros((rows,cols))
arr.mask=True
for i,row in enumerate(data):
arr[i,:len(row)]=row
print(arr.mean(axis=0))
выходы
[1.0 2.0 3.0 4.0]
Элементы массива становятся без масок (т.е. arr.mask[i,j]=False
), когда присваивается значение. Обратите внимание на результирующую маску ниже:
In [162]: arr
Out[162]:
masked_array(data =
[[1.0 2.0 3.0 --]
[1.0 2.0 3.0 --]
[1.0 2.0 3.0 4.0]],
mask =
[[False False False True]
[False False False True]
[False False False False]],
fill_value = 1e+20)
Если ваши данные довольно короткие, метод yosukesabai или чисто Python-решение, вероятно, будет быстрее, чем то, что я показываю выше. Инвестируйте в создание массива с маской только в том случае, если данные очень велики, и у вас достаточно простых операций с массивом для первоначальной стоимости установки массива.