2017-02-18 5 views
0

Ich habe mehrere Arrays mit unterschiedlicher Länge, und ich möchte, dass diese Daten zu vergleichbaren Arrays gemittelt werden, z.Durchschnittliche Arrays zu gleicher fester Länge

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

sollten Diese geben cast(array1, target_length) wie:

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

weil: 5/3 = 1,66. Auch würden wir erhalten: cast(array1, target_length) als:

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

weil: 4/3 = 1,33.

Die Arrays werden nie wachsen müssen, da eine gute numpy Lösung dafür verfügbar ist.

Gibt es eine Lösung mit der Bibliothek numpy?

+0

Was ist die generische Formel, die Sie anwenden würden? Was ist, wenn das Array wachsen muss? Was ist, wenn die Ziellänge 1 ist? – trincot

+1

Sie müssen ein wenig klarer sein, nicht sicher, was Sie versuchen zu tun. – PrestonH

+0

Ich aktualisierte meine Antwort. Die Arrays werden nicht wachsen. Die Richtlinie besteht darin, die Array-Länge durch die "target_length" zu teilen, um einen Schwellenwert zu erhalten, und dann die Werte teilweise hinzuzufügen, bis der Schwellenwert erreicht ist. –

Antwort

2

Die Frage in ein paar verschiedene Möglichkeiten gelesen werden könnte, aber wenn ich es richtig verstanden habe, was Sie versuchen zu erreichen ist

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 

Wenn das, was Sie anstreben, dies durch erhalten werden können numpy Operationen wie

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

Die Frage fragt "Gibt es eine Lösung mit der numpy Bibliothek?" und deine Antwort ist im Grunde: "Nein", richtig? – MSeifert

+0

@MSeifert: Da sie ein "np.array" als Rückgabetyp erhalten möchten, wird das Vermeiden von "numpy" wahrscheinlich schwierig sein, egal welche Lösung Sie sich vorstellen. (Ich habe die Antwort aktualisiert, um dies explizit zu machen, ohne die Berechnung zu ändern.) – fuglede

+1

Es geht nicht um den Rückgabetyp, sondern eher um die Vektorisierung des Problems. Ihre Lösung wird bei numpy-arrays langsamer sein als bei Python-Listen. Das macht es in meinen Augen zu einer nicht-numpigen Lösung. – MSeifert

Verwandte Themen