numpy среднее значение / стандартное отклонение массивов различной длины - PullRequest
1 голос
/ 23 февраля 2020

У меня есть список numpy массивов размера 5. Все массивы в списке имеют разную длину. Мне нужен один массив, который содержит средства элементов и один массив, который содержит стандартные отклонения. Пример:

[10, 10, 10, 10]
[ 8,  8,  8,  8, 8]
[12, 12, 12]

Я хочу:

[10, 10, 10, 9, 8] and
[1.3, 1.3, 1.3, 1.1, 0]

(я составил стандартные устройства разработки)

Заранее спасибо!

1 Ответ

1 голос
/ 23 февраля 2020

Один из способов - заполнить пустых мест значением NaNs, в результате чего получится двумерный массив, а затем использовать nan конкретный c NumPy арифметический c инструменты, такие как nanmean (вычислить среднее пропускание NaNs) и c. вдоль соответствующей оси, например так -

In [5]: import itertools

# a is input list of lists/arrays
In [48]: ar = np.array(list(itertools.zip_longest(*a, fillvalue=np.nan)))

In [49]: np.nanmean(ar,axis=1)
Out[49]: array([10., 10., 10.,  9.,  8.])

In [50]: np.nanstd(ar,axis=1)
Out[50]: array([1.63299316, 1.63299316, 1.63299316, 1.        , 0.        ])

Другой способ - преобразовать в pandas фрейм данных таким образом, чтобы пустых мест заполнялось NaNs, а затем использовать методы фрейма данных, которые счет для NaNs изначально, вот так -

In [16]: import pandas as pd

In [17]: df = pd.DataFrame(a)

In [18]: df.mean(0).values
Out[18]: array([10., 10., 10.,  9.,  8.])

In [19]: df.std(0,ddof=0).values
Out[19]: array([1.63299316, 1.63299316, 1.63299316, 1.        , 0.        ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...