(Después de leer el comentario) Creo que el argmax()método también funcionaría para matrices multidimensionales. La documentación vinculada da un ejemplo de esto:
(editar) Me refería a una respuesta anterior que se había eliminado . Y la respuesta aceptada vino después de la mía. Estoy de acuerdo en que argmaxes mejor que mi respuesta.
¿No sería más legible / intuitivo hacer esto?
numpy.nonzero(a.max() == a)
(array([1]), array([0]))
Innecesariamente lento, porque calcula el máximo y luego lo compara con todo de a. unravel_index (a.argmax (), a.shape).
Peter
Voté por esto porque no asume nada sobre el número de apariciones de a.max () en a. Mientras que a.argmax () devolverá la "primera" aparición (que está mal definida en el caso de una matriz multidimensional, ya que depende de la elección de la ruta transversal). docs.scipy.org/doc/numpy/reference/generated/… También creo que np.where () es una elección más natural / legible en lugar de np.nonzero ().
FizxMike
2
Simplemente puede escribir una función (que funciona solo en 2d):
defargmax_2d(matrix):
maxN = np.argmax(matrix)
(xD,yD) = matrix.shape
if maxN >= xD:
x = maxN//xD
y = maxN % xD
else:
y = maxN
x = 0return (x,y)
Respuestas:
El
argmax()
método debería ayudar.Actualizar
(Después de leer el comentario) Creo que el
argmax()
método también funcionaría para matrices multidimensionales. La documentación vinculada da un ejemplo de esto:>>> a = array([[10,50,30],[60,20,40]]) >>> maxindex = a.argmax() >>> maxindex 3
Actualización 2
(Gracias al comentario de KennyTM ) Puede usar
unravel_index(a.argmax(), a.shape)
para obtener el índice como una tupla:>>> from numpy import unravel_index >>> unravel_index(a.argmax(), a.shape) (1, 0)
fuente
unravel_index(a.argmax(), a.shape)
para obtener el índice como una tupla.(editar) Me refería a una respuesta anterior que se había eliminado . Y la respuesta aceptada vino después de la mía. Estoy de acuerdo en que
argmax
es mejor que mi respuesta.¿No sería más legible / intuitivo hacer esto?
numpy.nonzero(a.max() == a) (array([1]), array([0]))
O,
fuente
Simplemente puede escribir una función (que funciona solo en 2d):
def argmax_2d(matrix): maxN = np.argmax(matrix) (xD,yD) = matrix.shape if maxN >= xD: x = maxN//xD y = maxN % xD else: y = maxN x = 0 return (x,y)
fuente
Una forma alternativa es cambiar la
numpy
matrizlist
y usarmax
yindex
métodos:List = np.array([34, 7, 33, 10, 89, 22, -5]) _max = List.tolist().index(max(List)) _max >>> 4
fuente