Ostrzegam z góry: Mogę być całkowicie zdezorientowany w tej chwili. Opowiadam krótką historię o tym, co faktycznie próbuję osiągnąć, ponieważ może to wyjaśnić. Powiedzmy, że mam f(a,b,c,d,e)
i chcę znaleźć arg max (d,e) f(a,b,c,d,e)
. Rozważmy (trywialny przykład) Discretized siatki F
od f
:Oceń macierz na specyficznej subarray
F = np.tile(np.arange(0,10,0.1)[newaxis,newaxis,:,newaxis,newaxis], [10, 10, 1, 10, 10])
maxE = F.max(axis=-1)
argmaxD = maxE.argmax(axis=-1)
maxD = F.max(axis=-2)
argmaxE = maxD.argmax(axis=-1)
Jest to przypadek jak ja zazwyczaj rozwiązać wersję Discretized. Ale teraz załóżmy, że chcę rozwiązać arg max d f(a,b,c,d,e=X)
: Zamiast optymalnie wybranego e
dla każdego innego wejścia, e
jest stałe i podane (o rozmiarze AxBxCxD, który w tym przykładzie byłby 10x10x100x10
). Mam problemy z rozwiązaniem tego.
Moje naiwne podejście było
X = np.tile(np.arange(0,10)[newaxis,newaxis,:,newaxis], [10,10,1,10])
maxX = F[X]
argmaxD = maxX.argmax(axis=-1)
Jednak ogromny przypływ pamięci awarii mojego IDE oznacza, że F[X]
nie jest widocznie co szukałem.
Wydajność jest kluczowa.
wydaje się to, co chcesz, jest coś takiego: 'np.argmax (np.max (F, oś = -1), oś = -1)' –