¿Cómo puedo obtener el segundo valor mínimo de cada columna? Tengo esta matriz:
A = [[72 76 44 62 81 31]
[54 36 82 71 40 45]
[63 59 84 36 34 51]
[58 53 59 22 77 64]
[35 77 60 76 57 44]]
Deseo tener resultados como:
A = [54 53 59 36 40 44]
python
arrays
python-3.x
list
Señor dan
fuente
fuente
Respuestas:
Prueba esto, en una sola línea:
en acción:
y si tiene un valor duplicado, por ejemplo:
Si necesita omitir ambos
35
, puede usarset()
:fuente
Las operaciones en
numpy
matrices deben realizarse connumpy
funciones, así que mira esta:fuente
numpy
, creo que la soluciónlambda
debe disminuir la velocidadheapq.nsmallest
. Parece mejor mantener todo rápidonumpy
puedes usar heapq.nsmallest
salida:
Agregué un punto de referencia simple para comparar el rendimiento de las diferentes soluciones ya publicadas:
Usar
zip
con lasorted
función es la solución más rápida para listas 2d pequeñas mientras se usazip
conheapq.nsmallest
espectáculos para ser el mejor en listas 2d grandesfuente
Espero haber entendido su pregunta correctamente, pero de cualquier manera esta es mi solución, estoy seguro de que hay una forma más elegante de hacerlo, pero funciona
fuente
Suponiendo que
A
es asínumpy.array
(si esto es cierto, considere agregar unanumpy
etiqueta a su pregunta), entonces puede usarloapply_along_axis
de la siguiente manera:Tenga en cuenta que usé heapq.nsmallest, ya que realiza la clasificación necesaria para obtener 2 elementos más pequeños, a diferencia de lo
sorted
que hace la ordenación completa.fuente
Actualizado : Use
set
para evitar duplicar y transponer la lista usandozip(*A)
antiguo: segundo elemento mínimo en cada fila
fuente