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