Ich halte mich für eine erfahrene numpy Benutzer, aber ich bin nicht in der Lage, eine Lösung für das folgende Problem zu finden. Es sei angenommen, gibt es folgende Felder:Numpy blockweise reduzieren Operationen
# sorted array of times
t = numpy.cumsum(numpy.random.random(size = 100))
# some values associated with the times
x = numpy.random.random(size=100)
# some indices into the time/data array
indices = numpy.cumsum(numpy.random.randint(low = 1, high=10,size = 20))
indices = indices[indices <90] # respect size of 100
if len(indices) % 2: # make number of indices even
indices = indices[:-1]
# select some starting and end indices
istart = indices[0::2]
iend = indices[1::2]
Was ich jetzt will x
den Wert Array reduzieren angesichts der bezeichneten Intervalle von istart
und iend
. I.e.
# e.g. use max reduce, I'll probably also need mean and stdv
what_i_want = numpy.array([numpy.max(x[is:ie]) for is,ie in zip(istart,iend)])
Ich habe gegoogelt schon viel, aber alles, was ich war blockartig Operationen über stride_tricks
finden konnte, die nur für die regelmäßigen Blöcke ermöglicht. Ich war es, eine Lösung zu finden, ohne die Durchführung eine Pyhthon Schleife :-( In meiner realen Anwendung Arrays nicht in der Lage ist viel größer und Leistung spielt eine Rolle, so dass ich verwende numba.jit
für den Moment.
Gibt es eine numpy Funktion Ich bin Fehl die in der Lage ist zu tun, dass
Hätte 'x' immer floatende pt-Zahlen in' [0,1) '? – Divakar
No. 'x' ist im Allgemeinen eine viel kompliziertere Array-Struktur. –