¿Es posible mejorar la eficiencia de esas solicitudes linq? Uso dos bucles diferentes ... ¿Me pueden ayudar a optimizar este código?¿Linq en 2 matrices en 1 bucle?
double[] x = { 2, 3, 1, 5, 7, 2, 3 };
double[] y = { 1, 2, 3, 4, 5, 6, 7 };
IEnumerable<int> range = Enumerable.Range(0, x.Length);
double[] y_sorted = (from n in range orderby x[n] select y[n]).ToArray();
double[] x_sorted = (from n in range orderby x[n] select x[n]).ToArray();
Este código de Python es como que si lo prefiere:
x_index = argsort(x)
x_sorted = [x[i] for i in x_index]
y_sorted = [y[i] for i in x_index]
se dará cuenta que, en este código Python, yo uso una sola especie. ese no es el caso de este código C#.
deberíamos obtener al final:
x_sorted = { 1, 2, 2, 3, 3, 5, 7 }
y_sorted = { 3, 1, 6, 2, 7, 4, 5 }
Fred
Editar: uso el programa de Diadistis (después de una pequeña corrección)
Así que aquí vamos: Array.Sort (x, y) (0.05) es la manera más rápida de seguir (0.18) por
int[] x_index = Enumerable.Range(0, x.Length).OrderBy(i => x[i]).ToArray();
double[] x_sorted = x_index.Select(i => x[i]).ToArray();
double[] y_sorted = x_index.Select(i => y[i]).ToArray();
Las otras soluciones son bastante equivalentes (~ 0,35) en el consumo de tiempo en mi pc.
Si alguien tiene una idea interesante, la perfilaré y actualizaré esta publicación.
No, eso se ve bien para mí. ¿Quizás quiso decir 'orderby y [n]' en la primera declaración? – leppie
no, eso fue intencional. – Frederic
¿Qué hace tu código? – dtb