Усреднение по n элементам - PullRequest
0 голосов
/ 20 октября 2019

У меня есть такой массив: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Давайте предположим, что мне нужно среднее значение из 3 элементов, тогда мой целевой массив должен выглядеть следующим образом:

[2, 2, 2, 5, 5, 5, 8, 8, 8, 10]

Обратите внимание, что когданет доступных триплетов. Я хочу вычислить среднее значение по оставшимся элементам

Есть ли удобный способ сделать это с помощью операций с массивами?

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Я сделал большую часть этого в одном ряду просто для удовольствия: D * Заметьте, я использую sum (), чтобы сгладить список .. (это какой-то странный трюк с питоном)

def custom_avg(group: int, arr):
    out = list()
    [out.append(list(np.full( (1, group), np.sum(arr[i:i+group])/ (1 if i + group > len(arr) else group), dtype=int))) for i in range(0, len(arr), group) ]
    return sum(out,[])

Наслаждайтесь! удачи.

0 голосов
/ 20 октября 2019

Вы можете reshape массив использовать функцию mean, например:

a = np.arange(1,11)
b = a[:a.size//3*3]
b.shape = (-1,3)
c = np.mean(b, axis=1)
# c == array([2., 5., 8.])

Затем переназначить результаты в исходный массив:

c.shape = (-1,1)  # i.e. (len(b), 1)
b[:] = c
print(a)
# array([ 2,  2,  2,  5,  5,  5,  8,  8,  8, 10])

Обратите внимание, чтоэто работает, потому что b является подэлементом a. Кроме того, последний элемент не такой, как вы просили среднее значение (я оставил его нетронутым), но его будет легко исправить, например:

a[9:] = np.mean(a[9:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...