Matlab - Tiempo de ejecución

 
Vista:
sin imagen de perfil

Tiempo de ejecución

Publicado por Adrián (10 intervenciones) el 22/02/2017 13:40:52
Hola buenas, estoy usando una función la cual recoge datos de un archivo .txt y me los muestra como variables, pero lo he modificado para que me lea todos los archivos .txt que hay en una determinada carpeta. Hasta ahí todo va bien, pero necesito que os datos se vayan metiendo en unas variables sucesivamente con cada iteración si borrar los anteriores datos, es decir, si en una iteración recojo 10 valores de una variable X, en la segunda iteración esa variable X habrá aumentado a 20 valores y así sucesivamente hasta leer todos los archivos .txt y con cada una de las distintas variables, esto lo consigo hacer pero el tiempo de ejecución es demasiado elevado y tarda mucho al haber tantas variables dentro de los bucles. NEcesito ayuda para saber si se puede hacer de otra manera que el tiempo se reduzca considerablemente sin utilizar bucles o de cualquier otra forma. Mi código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
i = 1;
fname = leer_archivos('C:\Users\Adrián\Desktop\Adri\UNI\TFG\Desarrollo\Nuevo11-16\estación meteorológica\geonica','*.txt');
x = length(fname);
while i<=x
 
name=strjoin(fname(i));
 
[Fecha,yyyymmdd,hhmm,V_Viento,D_Viento,Temp_Air,Rad_Dir,Ele_Sol,Ori_Sol,Top,Mid,Bot,Cal_Top,Cal_Mid,Cal_Bot,Pres_Aire] = importfile(name);
 
if i == 1 %al ser i = 1, en esta primera iteracion se crea el vector de cada variable junto con todos sus datos
    Fecha_Total = Fecha;
    yyyymmdd_Total = yyyymmdd;
    hhmm_Total = hhmm;
    V_Viento_Total = V_Viento;
    D_Viento_Total = D_Viento;
    Temp_Air_Total = Temp_Air;
    Rad_Dir_Total = Rad_Dir;
    Ele_Sol_Total = Ele_Sol;
    Ori_Sol_Total = Ori_Sol;
    Top_Total = Top;
    Mid_Total = Mid;
    Bot_Total = Bot;
    Cal_Top_Total = Cal_Top;
    Cal_Mid_Total = Cal_Mid;
    Cal_Bot_Total = Cal_Bot;
    Pres_Aire_Total = Pres_Aire;
end
k = 2;
while k <= x %siguientes iteraciones hasta llegar al maximo de archivos .txt leidos
if i==k %hacemos la misma condicion que la primera, cogemos los valores 
        %de las variables pero de la segunda lectura y asi sucesivamente
        %en las siguientes lecturas hasta llegar al numero de archivos .txt leidos
    j=1;
    while j<=length(Fecha) %añadimos en cada lectura el siguiente valor de 
                           %cada variable al vector principal creado en la
                           %primera iteracion, rellenando asi el vector con todos los datos en orden
        Fecha_Total(end+1,1) = Fecha(j);
        yyyymmdd_Total(end+1,1) = yyyymmdd(j);
        hhmm_Total(end+1,1) = hhmm(j);
        V_Viento_Total(end+1,1) = V_Viento(j);
        D_Viento_Total(end+1,1) = D_Viento(j);
        Temp_Air_Total(end+1,1) = Temp_Air(j);
        Rad_Dir_Total(end+1,1) = Rad_Dir(j);
        Ele_Sol_Total(end+1,1) = Ele_Sol(j);
        Ori_Sol_Total(end+1,1) = Ori_Sol(j);
        Top_Total(end+1,1) = Top(j);
        Mid_Total(end+1,1) = Mid(j);
        Bot_Total(end+1,1) = Bot(j);
        Cal_Top_Total(end+1,1) = Cal_Top(j);
        Cal_Mid_Total(end+1,1) = Cal_Mid(j);
        Cal_Bot_Total(end+1,1) = Cal_Bot(j);
        Pres_Aire_Total(end+1,1) = Pres_Aire(j);
 
j=j+1;
    end
end
k=k+1;
end
 
i= i+1;
end



Muchas gracias, un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Tiempo de ejecución

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 22/02/2017 14:06:15
1
2
3
4
5
6
7
8
9
%         Fecha_Total(end+1,1) =Fecha(j) ;
%         yyyymmdd_Total(end+1,1) =yyyymmdd(j)  ;
%         hhmm_Total(end+1,1) =hhmm(j) ;
.
.
.
.
.
        datos(end+j,:)=[  Fecha(j)  yyyymmdd(j)  hhmm(j)  . . . . .  ]

luego al final lo separas. No puedo ejecutar tu código porque no hay suficiente informacion en la pregunta.

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Tiempo de ejecución

Publicado por Adrián (10 intervenciones) el 22/02/2017 16:05:40
Gracias por su tiempo, me comunico con usted por correo electronico. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Tiempo de ejecución

Publicado por Adrián (10 intervenciones) el 22/02/2017 20:51:06
Aquí adjunto los archivos para poder ejecutar correctamente el código.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Tiempo de ejecución

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/02/2017 14:22:37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear all,clc
i = 1;
path='H:\MATLABCABALLERO\AYUDAS\geonica';
type = '*.txt';
fname = leer_archivos(path,type);
x = length(fname);
Fecha_Total1 = [];
while i<=x
name=fname{i};
[Fecha,yyyymmdd,hhmm,V_Viento,D_Viento,Temp_Air,Rad_Dir,Ele_Sol,Ori_Sol,Top,Mid,Bot,Cal_Top,Cal_Mid,Cal_Bot,Pres_Aire] = importfile(name);
 Fecha_Total1=[ Fecha_Total1;   Fecha ];
i= i+1;
end
whos Fecha_Total1





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
path='H:\MATLABCABALLERO\AYUDAS\geonica';
type = '*.txt';
fname = leer_archivos(path,type);
i = 1;
%fname = leer_archivos('C:\Users\Adrián\Desktop\Adri\UNI\TFG\Desarrollo\Nuevo11-16\estación meteorológica\geonica','*.txt');
x = length(fname);
while i<=x
name=strjoin(fname(i));
[Fecha,yyyymmdd,hhmm,V_Viento,D_Viento,Temp_Air,Rad_Dir,Ele_Sol,Ori_Sol,Top,Mid,Bot,Cal_Top,Cal_Mid,Cal_Bot,Pres_Aire] = importfile(name);
if i == 1 %al ser i = 1, en esta primera iteracion se crea el vector de cada variable junto con todos sus datos
    Fecha_Total = Fecha;
end
k = 2;
while k <= x %siguientes iteraciones hasta llegar al maximo de archivos .txt leidos
if i==k %hacemos la misma condicion que la primera, cogemos los valores 
        %de las variables pero de la segunda lectura y asi sucesivamente
        %en las siguientes lecturas hasta llegar al numero de archivos .txt leidos
    j=1;
    while j<=length(Fecha) %añadimos en cada lectura el siguiente valor de 
                           %cada variable al vector principal creado en la
                           %primera iteracion, rellenando asi el vector con todos los datos en orden
        Fecha_Total(end+1,1) = Fecha(j);
j=j+1;
    end
end
k=k+1;
end
i= i+1;
end
whos   Fecha_Total

ambos códigos obtienen los mismos resultados, usa el primer código para optimizar tu código



Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero/
.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Tiempo de ejecución

Publicado por Adrián (10 intervenciones) el 01/03/2017 13:19:51
Muchisimas gracias, me ha servido de bastante!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar