es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ordenación de numpy.ndarray para devolver índices

Errores = [[ 0., 9., 12., 9., 14., 5., 4., 10., 8., 8., 6., 5., 9.],
[ 9., 0., 22., 16., 11., 12., 9., 21., 14., 11., 16., 15., 9.],
[12., 22., 0., 18., 23., 16., 10., 22., 21., 13., 13., 13., 15.],
[ 9., 16., 18., 0., 11., 12., 8., 19., 20., 11., 7., 9., 13.],
[14., 11., 23., 11., 0., 11., 7., 18., 9., 10., 7., 7., 14.],
[ 5., 12., 16., 12., 11., 0., 7., 13., 15., 5., 8., 10., 9.],
[ 4., 9., 10., 8., 7., 7., 0., 8., 8., 3., 4., 7., 4.],
[10., 21., 22., 19., 18., 13., 8., 0., 18., 12., 14., 13., 11.],
[ 8., 14., 21., 20., 9., 15., 8., 18., 0., 5., 11., 16., 10.],
[ 8., 11., 13., 11., 10., 5., 3., 12., 5., 0., 8., 9., 5.],
[ 6., 16., 13., 7., 7., 8., 4., 14., 11., 8., 0., 11., 7.],
[ 5., 15., 13., 9., 7., 10., 7., 13., 16., 9., 11., 0., 4.],
[ 9., 9., 15., 13., 14., 9., 4., 11., 10., 5., 7., 4., 0.]]

Arriba se muestra un numpy.ndarray de forma (13,13) con errores obtenidos en una determinada tarea de clasificación utilizando dos de las 13 características.

La tarea aquí es encontrar el error mínimo alcanzable y el par de características que logra este error mínimo.

Debido a que los datos son pocos, el error mínimo se puede ver a simple vista, es 3 y el par de características es (6,9) o (9,6).

(La línea diagonal con valores de 0 es la característica consigo misma, por lo que no se incluyó).

He intentado hacerlo con ‘argsort’, pero solo ordena cada fila por separado y no he llegado a la respuesta.

Por favor, ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el error más pequeño alcanzable y el par de características que logra este error mínimo, podemos usar el método unravel_index de numpy para obtener los índices del valor mínimo en el arreglo, y luego convertir esos índices al par correspondiente de características.

    import numpy as np
    
    errors = np.array([[ 0.,  9., 12.,  9., 14.,  5.,  4., 10.,  8.,  8.,  6.,  5.,  9.],
                       [ 9.,  0., 22., 16., 11., 12.,  9., 21., 14., 11., 16., 15.,  9.],
                       [12., 22.,  0., 18., 23., 16., 10., 22., 21., 13., 13., 13., 15.],
                       [ 9., 16., 18.,  0., 11., 12.,  8., 19., 20., 11.,  7.,  9., 13.],
                       [14., 11., 23., 11.,  0., 11.,  7., 18.,  9., 10.,  7.,  7., 14.],
                       [ 5., 12., 16., 12., 11.,  0.,  7., 13., 15.,  5.,  8., 10.,  9.],
                       [ 4.,  9., 10.,  8.,  7.,  7.,  0.,  8.,  8.,  3.,  4.,  7.,  4.],
                       [10., 21., 22., 19., 18., 13.,  8.,  0., 18., 12., 14., 13., 11.],
                       [ 8., 14., 21., 20.,  9., 15.,  8., 18.,  0.,  5., 11., 16., 10.],
                       [ 8., 11., 13., 11., 10.,  5.,  3., 12.,  5.,  0.,  8.,  9.,  5.],
                       [ 6., 16., 13.,  7.,  7.,  8.,  4., 14., 11.,  8.,  0., 11.,  7.],
                       [ 5., 15., 13.,  9.,  7., 10.,  7., 13., 16.,  9., 11.,  0.,  4.],
                       [ 9.,  9., 15., 13., 14.,  9.,  4., 11., 10.,  5.,  7.,  4.,  0.]])
    
    # Obtener los índices del valor mínimo en el arreglo
    min_idx = np.unravel_index(np.argmin(errors), errors.shape)
    min_error = errors[min_idx]
    
    # Convertir los índices al par correspondiente de características (agregando 1 para excluir la característica diagonal)
    feat_pair = (min_idx[0]+1, min_idx[1]+1)
    
    print("El error más pequeño alcanzable es {:.2f} utilizando las características {} y {}".format(min_error, feat_pair[0], feat_pair[1]))
    

    Esto debería dar una salida de El error más pequeño alcanzable es 3.00 utilizando las características 6 y 9.

Comments are closed.