Numpy ordenar el comportamiento extraño

Estoy mirando las respuestas a una pregunta anterior que hice. Numpy.unique con orden conservado Funcionan muy bien, pero con un ejemplo, tengo problemas.

b ['Aug-09' 'Aug-09' 'Aug-09' ..., 'Jan-13' 'Jan-13' 'Jan-13'] b.shape (83761,) b.dtype |S6 bi, idxb = np.unique(b, return_index=True) months = bi[np.argsort(idxb)] months ndarray: ['Feb-10' 'Aug-10' 'Nov-10' 'Oct-12' 'Oct-11' 'Jul-10' 'Feb-12' 'Sep-11'\n 'Jan-10' 'Apr-10' 'May-10' 'Sep-09' 'Mar-11' 'Jun-12' 'Jul-12' 'Dec-09'\n 'Aug-09' 'Nov-12' 'Dec-12' 'Apr-12' 'Jun-11' 'Jan-11' 'Jul-11' 'Sep-10'\n 'Jan-12' 'Dec-10' 'Oct-09' 'Nov-11' 'Oct-10' 'Mar-12' 'Jan-13' 'Nov-09'\n 'May-11' 'Mar-10' 'Jun-10' 'Dec-11' 'May-12' 'Feb-11' 'Aug-11' 'Sep-12'\n 'Apr-11' 'Aug-12'] 

¿Por qué los meses comienzan con febrero-10 en lugar de agosto-09? Con conjuntos de datos más pequeños obtengo el comportamiento esperado, es decir, los meses comienzan a partir de agosto de 2009. Obtengo el 10 de febrero con todas las respuestas a la pregunta anterior.


Esto funciona

 months = [] for bi in b: if bi not in months: months.append(bi) 

http://www.uploadmb.com/dw.php?id=1364341573 Aquí está mi conjunto de datos. Inténtalo tú mismo.

 import numpy as np f=open('test.txt','r') res = [] for line in f.readlines(): res.append(line.strip()) a = np.array(res) _, idx = np.unique(a, return_index=True) print a[np.sort(idx)] 

Actualizar:

Creo que el problema es en realidad este. ¿Qué versión de Numpy estás ejecutando?

http://projects.scipy.org/numpy/ticket/2063

Reprodifiqué su problema porque la instalación de Numpy en la que probé en Ubuntu era 1.6.1, y el error se solucionó en 1.6.2 y superior.

Actualice a Numpy, e intente de nuevo, funcionó para mí en mi máquina Ubuntu.


En estas líneas:

 bi, idxb = np.unique(b, return_index=True) months = bi[np.argsort(idxb)] 

Hay dos errores:

  1. Desea utilizar realmente los índices ordenados en la matriz original, b[...]
  2. Desea los índices ordenados, no los índices que ordenan los índices, así que use sort no argsort .

Esto debería funcionar:

 bi, idxb = np.unique(b, return_index=True) months = b[np.sort(idxb)] 

Sí, lo hace, usando su conjunto de datos y ejecutando python 2.7, numpy 1.7 en Mac OS 10.6, 64 bit

 Python 2.7.3 (default, Oct 23 2012, 13:06:50) IPython 0.13.1 -- An enhanced Interactive Python. In [1]: import numpy as np In [2]: np.__version__ Out[2]: '1.7.0' In [3]: from platform import architecture In [4]: architecture() Out[4]: ('64bit', '') In [5]: f = open('test.txt','r') In [6]: lines = np.array([line.strip() for line in f.readlines()]) In [7]: _, ilines = np.unique(lines, return_index = True) In [8]: months = lines[np.sort(ilines)] In [9]: months Out[9]: array(['Aug-09', 'Sep-09', 'Oct-09', 'Nov-09', 'Dec-09', 'Jan-10', 'Feb-10', 'Mar-10', 'Apr-10', 'May-10', 'Jun-10', 'Jul-10', 'Aug-10', 'Sep-10', 'Oct-10', 'Nov-10', 'Dec-10', 'Jan-11', 'Feb-11', 'Mar-11', 'Apr-11', 'May-11', 'Jun-11', 'Jul-11', 'Aug-11', 'Sep-11', 'Oct-11', 'Nov-11', 'Dec-11', 'Jan-12', 'Feb-12', 'Mar-12', 'Apr-12', 'May-12', 'Jun-12', 'Jul-12', 'Aug-12', 'Sep-12', 'Oct-12', 'Nov-12', 'Dec-12', 'Jan-13'], dtype='|S6') 

OK, finalmente puedo reproducir tu problema en Ubuntu 64 bit también:

 Python 2.7.3 (default, Aug 1 2012, 05:14:39) IPython 0.12.1 -- An enhanced Interactive Python. In [1]: import numpy as np In [2]: np.__version__ Out[2]: '1.6.1' In [3]: from platform import architecture In [4]: architecture() Out[4]: ('64bit', 'ELF') In [5]: f = open('test.txt','r') In [6]: lines = np.array([line.strip() for line in f.readlines()]) In [7]: _, ilines = np.unique(lines, return_index=True) In [8]: months = lines[np.sort(ilines)] In [9]: months Out[9]: array(['Feb-10', 'Aug-10', 'Nov-10', 'Oct-12', 'Oct-11', 'Jul-10', 'Feb-12', 'Sep-11', 'Jan-10', 'Apr-10', 'May-10', 'Sep-09', 'Mar-11', 'Jun-12', 'Jul-12', 'Dec-09', 'Aug-09', 'Nov-12', 'Dec-12', 'Apr-12', 'Jun-11', 'Jan-11', 'Jul-11', 'Sep-10', 'Jan-12', 'Dec-10', 'Oct-09', 'Nov-11', 'Oct-10', 'Mar-12', 'Jan-13', 'Nov-09', 'May-11', 'Mar-10', 'Jun-10', 'Dec-11', 'May-12', 'Feb-11', 'Aug-11', 'Sep-12', 'Apr-11', 'Aug-12'], dtype='|S6') 

Funciona en Ubuntu después de la actualización de Numpy:

 Python 2.7.3 (default, Aug 1 2012, 05:14:39) IPython 0.12.1 -- An enhanced Interactive Python. In [1]: import numpy as np In [2]: np.__version__ Out[2]: '1.7.0' In [3]: f = open('test.txt','r') In [4]: lines = np.array([line.strip() for line in f.readlines()]) In [5]: _, ilines = np.unique(lines, return_index=True) In [6]: months = lines[np.sort(ilines)] In [7]: months Out[7]: array(['Aug-09', 'Sep-09', 'Oct-09', 'Nov-09', 'Dec-09', 'Jan-10', 'Feb-10', 'Mar-10', 'Apr-10', 'May-10', 'Jun-10', 'Jul-10', 'Aug-10', 'Sep-10', 'Oct-10', 'Nov-10', 'Dec-10', 'Jan-11', 'Feb-11', 'Mar-11', 'Apr-11', 'May-11', 'Jun-11', 'Jul-11', 'Aug-11', 'Sep-11', 'Oct-11', 'Nov-11', 'Dec-11', 'Jan-12', 'Feb-12', 'Mar-12', 'Apr-12', 'May-12', 'Jun-12', 'Jul-12', 'Aug-12', 'Sep-12', 'Oct-12', 'Nov-12', 'Dec-12', 'Jan-13'], dtype='|S6')