[Python-es] Ordenar de acuerdo a columnas
Kiko
kikocorreoso en gmail.com
Vie Ene 6 13:22:02 CET 2012
El 6 de enero de 2012 09:36, lasizoillo <lasizoillo en gmail.com> escribió:
> El día 6 de enero de 2012 08:51, ezequiel <ezecastillo en gmail.com>
> escribió:
> > Hola a todos y feliz comienzo de año,
> >
> > Les paso a explicar mi problema: en una parte de mi código escribo a
> > un archivo de salida con el siguiente comando:
> >
> > 'outfile.write("%8.4f %10.4E %8.3f %10.4E %10.4E\n" % (d[i], p[j],
> > qa[k], fuerza, ft[i]))'
> >
> > es decir, ya tengo los arreglos por separado. Pero esta orden se
> > encuentra dentro de tres loops que iteran con respecto a 'i', 'j' y 'k'
> > De modo tal que el archivo de salida tiene la siguiente pinta:
> >
> >
> > # dist alpha carga fuerza fuerza-teo
> > 12.0000 1.0000E-03 0.100 -9.2793E+01 -3.0569E+02
> > 12.0000 1.0000E-03 1.200 -1.1306E+02 -3.0569E+02
> > 12.0000 1.0000E-03 2.300 -1.1436E+02 -3.0569E+02
> > ...
> > 12.0025 1.0000E-03 0.100 -9.2679E+01 -3.0510E+02
> > 12.0025 1.0000E-03 1.200 -1.1290E+02 -3.0510E+02
> > ...
> >
> > Lo que quiero hacer es tener para cada combinación de alpha y carga
> > (p[] y qa[]) (que no se encuentran continuas), todos los valores de
> > distancia y fuerzas correspondientes, o sea mi archivo de salida
> > tendría que quedar algo asi:
> >
> > # alpha carga dist fuerza fuerza-teo
> > 1.0000E-03 0.100 12.0000 -9.2793E+01 -3.0569E+02
> > 1.0000E-03 0.100 12.0025 -9.2679E+01 -3.0510E+02
> > ...
> > 1.0000E-03 1.200 12.0000 -1.1306E+02 -3.0569E+02
> > 1.0000E-03 1.200 12.0025 -1.1290E+02 -3.0510E+02
> > ...
> > 1.0000E-03 2.300 12.0000 -1.1436E+02 -3.0569E+02
> > ...
> >
> > y así sucesivamente para las distintas combinaciones.
> > Hace una semana que empecé a programar en Python, por lo que les pido
> > disculpas si esto es muy fácil de hacer.
> >
>
>
> Hola.
Podrías usar argsort [1] incluido en numpy (parece que haces cosas de
ciencia por lo que te recomiendo usar numpy).
Un ejemplo tonto (en la consola de ipython):
*In [29]: import numpy as np
In [30]: a = np.array((np.arange(20), np.random.randn(20))) #Creamos un
array
In [31]: a[0,3] = 0 #Repetimos un elemento en la primera columna para que
se parezca a tu problema
In [32]: a
Out[32]:
array([[ 0. , 1. , 2. , 0. ,
4. , 5. , 6. , 7. ,
8. , 9. , 10. , 11. ,
12. , 13. , 14. , 15. ,
16. , 17. , 18. , 19. ],
[ 0.62109734, -1.66227531, -0.13531228, -0.36858396,
0.20819283, -1.91722834, 0.43300811, -1.92397695,
-0.09230548, 0.14619123, 1.59821385, -0.28736747,
0.66816904, -1.65682382, -0.16931408, -1.52021098,
-1.27927906, 1.51208342, -1.22674823, 0.70934827]])
In [33]: a.argsort() #Esto te daría los índices ordenados de menor a mayor
para tu array en cada una de las columnas
Out[33]:
array([[ 0, 3, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19],
[ 7, 5, 1, 13, 15, 16, 18, 3, 11, 14, 2, 8, 9, 4, 6, 0, 12,
19, 17, 10]])*
[1]
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html#numpy.argsort
Espero te sirva.
Saludos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120106/be5c2010/attachment.html>
Más información sobre la lista de distribución Python-es