• Viernes 15 de Noviembre de 2024, 07:41

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - rpg245

Páginas: [1]
1
C/C++ / Re: optimizando el código
« en: Martes 9 de Diciembre de 2008, 16:58 »
En cuanto al random lo hago pues como creo que se hace normalmente, fuera del bucle inicializo con srand

stime = (unsigned) ltime/2;
srand(stime);

Después dentro del bucle tomo valores aleatorios de la siguiente forma:
val=random(n_edges_points+1); donde n_edges_points es un valor que creo anteriormente, generalmente toma valores entre 10000 y 30000....
no lo puedo simplificar más.....

En cuanto al cvSetReal2D, lo llamo 5 veces si, pero por que ya has visto que cada columna se rellena con una ecuación diferente...y por tanto he de llamarlo con las 5 ecuaciones distintas....

2
C/C++ / Re: optimizando el código
« en: Martes 9 de Diciembre de 2008, 16:43 »
Si puede que fuera menos legible, pero eso m da igual.....como ya os digo itero el código millones de veces...si por cada iteración suponte que en cualkier chorrada consigo reducir un ms....ya estoy recortando un millon de milisegundos, es decir, reduzco el cómputo global en 1000s...unos 16 minutos...!!

Y en cuanto al random?...sabéis algo para hacerlo de otra forma??...
Cada 100000 iteraciones de mi código, la realización de ese random se lleva alrededor del 25% del tiempo...tarda casi lo mismo que lo que tardo en insertar un nodo en un array de listas enorme...lo cuál no me parece normal....bueno un saludo!!

3
C/C++ / optimizando el código
« en: Martes 9 de Diciembre de 2008, 16:27 »
Bueno pues como leéis en el título del post, después de hacer todo mi programa, ahora voy a tratar de optimizarlo, y voy a ver si me podéis echar una mano.
El caso es que mi código es un bucle que se realiza millones de veces, por lo que reducir el tiempo de computación de cualkier instrucción dentro del bucle conlleva el ahorro de bastante tiempo.
Según he visto, y es curioso, una de las cosas que más tarda en mi código es la generación de un número aleatorio con: random(rand_max);...!!!

Alguien sabe alguna forma de generar un número aleatorio de forma más rápida???!!!!

Otra cosa que quería saber es si me podéis ayudar con esto:

for (i=0;i<5;i++){
           cvSetReal2D(A,i,0,(double) X*X-Y*Y);
           cvSetReal2D(A,i,1,(double) 2*X*Y);
           cvSetReal2D(A,i,2,(double) X);
           cvSetReal2D(A,i,3,(double) Y);
           cvSetReal2D(A,i,4,(double) 1.0);
 }

Esta es la forma que tengo de asignar los valores a una matriz, pero me gustaría saber si lo puedo hacer de una forma directa sin usar un bucle,algo del siguiente estilo...:

cvSetReal2D(A,i,(double) X[0]*X[0]-Y[0]*Y[0],(double) X[1]*X[1]-Y[1]*Y[1],(double) X[2]*X[2]-Y[2]*Y[2],(double) X[3]*X[3]-Y[3]*Y[3],(double) X[4]*X[4]-Y[4]*Y[4]);

así asigno a la columna "i" ese vector, no sé o algo que me sirva, escucho proposiciones...un saludo y muchas gracias por adelantado!!!!!

4
C/C++ / Usando OPENCV ---cvSolve...
« en: Lunes 3 de Noviembre de 2008, 16:37 »
Hola a todos. Estoy pasando un programa de Matlab a C, y para ello uso la biblioteca OPENCV.
En concreto ahora estoy utilizando cvSolve que resuelve el sistema de ecuaciones A*X=B, donde A y B son conocidas...
Supuestamente haciendo cvSolve(A,B,X, CV_LU), en X debería obtener el resultado, pero no sé cómo acceder al resultado.

La cabecera de la función es esta:
int cvSolve( const CvArr* A, const CvArr* B, CvArr* X, int method=CV_LU );

He probado haciendo X->data.db[] y nada, y con cvGetReal tampoco....a ver si alguien sabe cómo acceder a los datos de X...
En concreto, X, es una matriz columna de 5 filas...espero vuestra respuesta..un saludo!!

Páginas: [1]