Como posso obter o segundo valor mínimo de cada coluna? Eu tenho 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]]
Eu gostaria de ter uma saída como:
A = [54 53 59 36 40 44]
python
arrays
python-3.x
list
Sr. Dan
fonte
fonte
Respostas:
Tente isso, em apenas uma linha:
em ação:
e se você tiver um valor duplicado, por exemplo:
Se você precisar pular os dois
35
s, poderá usarset()
:fonte
As operações em
numpy
matrizes devem ser feitas comnumpy
funções, portanto, veja esta:fonte
numpy
, acho que a soluçãolambda
deve desacelerarheapq.nsmallest
. Parece melhor manter tudo rápidonumpy
você pode usar heapq.nsmallest
resultado:
Eu adicionei uma referência simples para comparar o desempenho das diferentes soluções já postadas:
Usar
zip
com asorted
função é a solução mais rápida para pequenas listas 2D, enquanto usarzip
comheapq.nsmallest
shows é o melhor em grandes listas 2Dfonte
Espero ter entendido sua pergunta corretamente, mas de qualquer maneira, aqui está a minha solução, tenho certeza de que existe uma maneira mais elegante de fazer isso, mas funciona
fonte
Supondo que
A
sejanumpy.array
(se isso for verdade, considere adicionar umanumpy
tag à sua pergunta), você poderá usarapply_along_axis
da seguinte maneira:Observe que eu usei heapq.nsmallest , pois faz a classificação necessária para obter 2 elementos menores, ao contrário do
sorted
que faz a classificação completa.fonte
Atualizado : use
set
para impedir a duplicação e a transposição da lista usandozip(*A)
old: segundo item mínimo em cada linha
fonte