У меня есть массив различного размера, из которого я хотел бы усреднить каждый последовательный n чисел и построить в результате другой массив.Создайте массив, усреднив n последовательных чисел в массиве
Я пришел с двумя разными способами, но у каждого есть свои проблемы, и я не уверен, что это лучший способ решить эту проблему:
Использование numpy.array_split функции():
import numpy as np no_splits = 3 #Or any number user defines no_items = int(np.random.random(1)*100) # To get a variable number of items pre_array = np.random.random(no_items) mean_array = np.mean(np.array_split(pre_array,no_splits)) #This is efficient but gives an error if len(pre_array)%no_splits != 0
перечисление (pre_array) альтернатива:
mean_array = [np.mean(pre_array[i-no_splits+1:i]) for i, x in enumerate(pre_array) if i%no_splits == 0 and i != 0]
Это нормально, но зажимает последние значения, если i% no_splits! = 0. В идеале я бы создал последнее значение, которое является средним из оставшихся при сохранении кода.
Каждое из этих работ для моих целей, но я не уверен, являются ли они наиболее эффективными для больших массивов.
Спасибо заранее!
ли вы имеете в виду вы хотите усреднить '0 1 2' и' 1 2 3' ... * или * '0 1 2' и '3 4 5' ... от' 0 1 2 3 4 ... '? – Daniel
Привет @Ophion Мне нужен последний, ваш ответ, если я понял и правильно его испробовал, использует средний метод движущегося окна, длина массива которого совпадает с исходным массивом. Я хотел бы, чтобы длина была равна len (new_array) = original_array/no_splits округленная. – Matt
Я обновил свой ответ, пожалуйста, дайте мне знать, если это то, что вы ищете. – Daniel