Avviso in anticipo: al momento posso essere completamente confuso. Racconto una breve storia su ciò che effettivamente cerco di ottenere perché potrebbe chiarire le cose. Diciamo che ho f(a,b,c,d,e)
e voglio trovare arg max (d,e) f(a,b,c,d,e)
. Si consideri un (esempio banale di una) di griglia discretizzata F
di f
:Valutazione dell'array al subarray specifico
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)
Questo è il caso come io di solito risolvere la versione discretizzata. Ma ora assumiamo invece che io voglia risolvere arg max d f(a,b,c,d,e=X)
: Invece di scegliere in modo ottimale e
per ogni altro input, e
è un numero fisso e dato (di dimensione AxBxCxD, che in questo esempio sarebbe 10x10x100x10
). Ho problemi a risolvere questo.
Il mio approccio ingenuo era
X = np.tile(np.arange(0,10)[newaxis,newaxis,:,newaxis], [10,10,1,10])
maxX = F[X]
argmaxD = maxX.argmax(axis=-1)
Tuttavia, l'enorme ondata di memoria che blocca il mio IDE implica che F[X]
non è evidentemente quello che stavo cercando.
Le prestazioni sono fondamentali.
sembra ciò che si vuole è qualcosa di simile: 'np.argmax (np.max (F, asse = -1), asse = -1)' –