considere o seguinte código:
a = np.random.random ([5,5])
ind = np.argsort (a, eixo = 1)
a_sorted = a [ind]
np.sort (a, eixo = 1)
agora a_sorted e a devem ser classificados ao longo do eixo 1. No entanto, nem mesmo as formas são mais idênticas. a ainda é de (5,5) enquanto a_ordenado é (5,5,5). Se esse for o comportamento pretendido, alguém pode me dizer por quê?
argsort()
está funcionando bem, mas a indexação não funciona da maneira que você espera.
http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#advanced -indexing
Experimente isto:
a = np.random.random([5,5])
i = np.arange(len(a))[:, np.newaxis]
j = np.argsort(a, axis=1)
a_sorted = a[i, j]
np.sort(a, axis=1)
Eu estava confuso da mesma forma. A documentação declara especificamente,
Devoluções
index_array: ndarray, int
Matriz de índices que classificama
ao longo do eixo especificado.
Em outras palavras,a[index_array]
produz uma
.
O que se aplica apenas a uma matriz 1D. A documentação deve ser estendida para especificar que este não é o caso para matrizes ND?
@lzkelley Sim, um patch para melhorar a documentação seria muito bem-vindo.
@shoyer legal, farei um PR para ele e atualizarei
Seria bom se houvesse um exemplo de como realmente usar a saída para classificar o array ND.
Também seria bom se houvesse uma solução mais legível do que a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]
Talvez @seberg pudesse torná-lo um de seus acréscimos à função de indexação.
Eu não acho que se encaixe na indexação muito obviamente, uma função pick ou então provavelmente é uma combinação mais fácil.
+1 para uma nova função.
Todo o propósito de argsort
(em oposição a sort
) não deve ser usado para indexação?
argsort
fornece os índices para classificar ao longo de um eixo, mas na verdade classificar ao longo desse eixo usando os índices parece desnecessariamente prolixo. A menos que haja uma maneira mais simples que eu não conheça.
uma função de escolha ou então é provavelmente uma correspondência mais fácil.
Este é o número 8708
Comentários muito úteis
Seria bom se houvesse um exemplo de como realmente usar a saída para classificar o array ND.
Também seria bom se houvesse uma solução mais legível do que
a[np.arange(np.shape(a)[0])[:,np.newaxis], np.argsort(a)]