2017-02-18 11 views
0

У меня есть несколько массивов различной длины, и я хотел бы, чтобы эти данные были усреднены для сопоставимых массивов, например.Средние массивы с одинаковой фиксированной длиной

array1 = np.array([1, 2, 3, 4, 5]) 
array2 = np.array([1, 2, 3, 4]) 
target_length = 3 
def cast(array, target_length): 
    ... 

Это должно дать cast(array1, target_length) как:

np.array([(1+2*0.66)/1.66, (2*0.33+3*1+4*0.33)/1.66, (4*0.66+5)/1.66 ])

, потому что: 5/3 = 1,66. Кроме того, мы получили бы: cast(array1, target_length) как:

np.array([(1+2*0.33)/1.33, (2*0.66+3*0.66)/1.33, (3*0.33+4)/1.33])

, так как: 4/3 = 1,33.

Массивы никогда не будут расти, так как хорошее решение numpy доступно для этого.

Есть ли решение, использующее библиотеку numpy?

+0

Какова общая формула, которую вы бы применили? Что, когда массив должен расти, что, если его длина цели равна 1, ... – trincot

+1

Вам нужно быть немного более понятным, не уверен, что вы пытаетесь сделать. – PrestonH

+0

Я обновил свой ответ. Массивы не будут расти. Политика состоит в том, чтобы разделить длину массива на 'target_length', чтобы получить порог, а затем добавить значения частично до тех пор, пока не будет получен порог. –

ответ

2

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

def cast(array, target_length): 
    target = np.zeros(target_length) 
    for i in range(target_length*len(array)): 
     target[i//len(array)] += array[i//target_length]/len(array) 
    return target 

Если это то, что вы стремитесь, это может быть получена с помощью numpy Операции как

def cast(array, target_length): 
    return np.mean(np.repeat(array, target_length).reshape(-1, len(array)), 1) 
+0

Вопрос спрашивает: «Есть ли решение, использующее библиотеку numpy?» и ваш ответ в основном: «нет», не так ли? – MSeifert

+0

@MSeifert: поскольку они хотят получить «np.array» в качестве возвращаемого типа, избежать «numpy», вероятно, будет непросто, независимо от того, какое решение вы можете придумать. (Я обновил ответ, чтобы сделать это явным, не меняя вычисления.) – fuglede

+1

Речь идет не о типе возврата, а о векторизации проблемы. Ваше решение будет медленнее на numpy-массивах, чем на списках python. Это то, что делает его не-numpy-решением в моих глазах. – MSeifert