Matlab - llamar variables del workspace

 
Vista:
sin imagen de perfil

llamar variables del workspace

Publicado por victor (8 intervenciones) el 08/03/2017 05:44:32
Buenas estimados, una consulta, me estoy matando la cabeza para poder realizar la siguiente operación,
tengo por ejemplo 4 variables en el workspace, c1 c2 c3 c4, que obtuve con el siguiente código:

1
2
3
4
5
6
7
8
CED=unique(ejem,'stable');
DIS_CED=length(CED)
for i=1:DIS_CED;
matriz=strcmp(ejem,CED{i});
matriz2=find(matriz==1);
vi=genvarname(['C',num2str(i)]);%tenemos las posiciones de los repetidos
eval([vi, '=matriz2']);
end

Ahora quiero para estas 4 variables que especificamente se crearon en el workspace tienen ya las posiciones para poder dividir mi matriz principal que es ejem por sus diferentes valores, ejemplo tengo algo asi:
ejem={a a a a; b b b b b b ;c c c c c; d d d}
y en c1=(1 2 3 4) c2=(5 6 7 8 9 10) c3=(11 12 13 14 15) c4 =( 16 17 18), esto ejemplificando yo poseo, ahora bien
quiero sin estar llamando a c1 o c2 etc... hacer algo parecido a esto:
for i=c1(1):c1(length(c1))%
GC1=(5+6) %y también que este vaya cambiando por cada c creado, osea obtener un GC1, GC2, GC3 hasta el GC4
end
ahora bien esto quiero hacerlo pero automático que solo cambie el último número para no estar haciendo otra vez lo anterior pero con c2 luego c3 y c4, etc...si hubiese más....
Bueno en esos estoy partiendome la cabeza y ya no halló como hacer.
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

llamar variables del workspace

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 08/03/2017 13:33:46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%%http://www.lawebdelprogramador.com/foros/Matlab/1592213-llamar-variables-del-workspace.html#last
clear all
ejem={'a'  'a' 'a' 'a'  'b'  'b'  'b'  'b' 'b'  'b'  'c' 'c' 'c' 'c' 'c'  'd' 'd' 'd' } ;
AED=unique(ejem,'stable');
DIS_CED=length(AED);
for i=1:DIS_CED;
matriz=strcmp(ejem,AED{i});
matriz2=find(matriz==1);
 vi=genvarname(['C',num2str(i)]);%tenemos las posiciones de los repetidos
 eval([vi, '=matriz2']);
end
nombre=whos('C*');
for j=1:length(AED)
    c=eval(nombre(j).name)
    for i=c(1):c(end)
     vi=genvarname(['CG',num2str(j)]);%tenemos las posiciones de los repetidos
     eval([vi, '=5+6']);
    end
end

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
>> genvarname14
C1 =
     1     2     3     4
C2 =
     5     6     7     8     9    10
C3 =
    11    12    13    14    15
C4 =
    16    17    18
c =
     1     2     3     4
CG1 =
    11
CG1 =
    11
CG1 =
    11
CG1 =
    11
c =
     5     6     7     8     9    10
CG2 =
    11
CG2 =
    11
CG2 =
    11
CG2 =
    11
CG2 =
    11
CG2 =
    11
c =
    11    12    13    14    15
CG3 =
    11
CG3 =
    11
CG3 =
    11
CG3 =
    11
CG3 =
    11
c =
    16    17    18
CG4 =
    11
CG4 =
    11
CG4 =
    11


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
0
Comentar

llamar variables del workspace

Publicado por Jonathan Iván (4 intervenciones) el 07/06/2019 20:41:58
Hola tengo un problema relacionado, como puedo hacer para llamar a variables que empiezan igual en mi caso Ke1, Ke2,.... KeN. Ya q tengo que hacer operaciones repetitivas entre ellos asi:
Ke1=transp(Le1)*ke1*Le1;
Ke2=transp(Le2)*ke2*Le2;
.
.
.
KeN=transp(LeN)*keN*LeN;
soy nuevo en esto de programar y no se como llamar a estas variables para poder automatizar estas operaciones.
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

llamar variables del workspace

Publicado por victor (8 intervenciones) el 08/03/2017 17:57:05
Estimado, disculpas sobre la respuesta muy tarde, le muestro como empieza todo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear all
[num,txt,raw] = xlsread('GC.xlsx','Hoja1');
GC=raw;
[m,n]=size(GC);
 
 for j=1:m;
          if isnan(GC{j,1})==1
            ejem{j,1}=ejem{j-1};
           else
            ejem{j,1}= (GC{j,1});
           end
 end
 
 CED=unique(ejem,'stable');
 DIS_CED=length(CED)
 for i=1:DIS_CED;
matriz=strcmp(ejem,CED{i});
matriz2=find(matriz==1);
vi=genvarname(['C',num2str(i)]);%tenemos las posiciones de los repetidos
eval([vi, '=matriz2']);
 
 end

GC es un array que contiene datos con los cuales voy a dividir, en CG pueden subirse n datos con n usuarios y estos son lo que voy a dividir en nuevos arrays en este caso llamados CG1 CG2, etc donde se procederá a realizar diferentes operaciones...Esto seguro ayudará a muchos, sin duda...por eso aunque sea tarde le respondo para que otros vean como lo he llevado, es corto pero importante...muchas gracias de antemano por su valiosa atención a estos casos que si son un dolor de cabeza.
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

llamar variables del workspace

Publicado por victor (8 intervenciones) el 08/03/2017 21:26:03
Estimado, se fue el tiempo de cambio, pero sin embargo le presento lo que hice, aunque no es lo adecuado y por eso busco su ayuda, espero sirba a mucha gente lo siguiente:
esta son los arrays:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GC={
'BPAC'	26	        B.QUISHPEZ'
 	        	        'C.VINUEZA'
                        	'D.CALERO'
                         	'R.GUTIERREZ'
'UNO'	24	        'B.QUISHPEZ'
                        	'C.VINUEZA'
                                'D.CALERO'
                                'D.CASTILLO'
                                'D.ORTEGA'
'CAR'	25	        'B.QUISHPEZ'
                            	'C.VINUEZA'
                        	'D.CALERO' }

ejem={'BPAC' 'BPAC' 'BPAC' 'BPAC' 'UNO' 'UNO' 'UNO' 'UNO' 'UNO' 'CAR' 'CAR' }
ejem2={26 26 26 26 24 24 24 24 24 25 25}
ejem3={ 'B.QUISHPEZ' 'C.VINUEZA' 'D.CALERO' 'R.GUTIERREZ' 'B.QUISHPEZ' 'C.VINUEZA' 'D.CALERO' 'D.CASTILLO' 'D.ORTEGA' 'B.QUISHPEZ' 'C.VINUEZA' 'D.CALERO'}

Este es el código
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
%subo manualmente GC%...me surgió problemas al subirle con el código anterior que era:
% [num,txt,raw] = xlsread('GC.xlsx','Hoja1');
% GC=raw;%donde cambiaba isempty por isnan
 
[m,n]=size(GC);
 
[m,n]=size(GC);
 
 for j=1:m;
          if isempty(GC{j,1})==1
            ejem{j,1}=ejem{j-1};
           else
            ejem{j,1}= (GC{j,1});
           end
 end
  for j=1:m;
          if isempty(GC{j,2})==1
            ejem2{j,1}=ejem2{j-1};
           else
            ejem2{j,1}= (GC{j,2});
           end
  end
  for j=1:m;
          if isempty(GC{j,3})==1
            ejem3{j,1}=ejem3{j-1};
           else
            ejem3{j,1}= (GC{j,3});
           end
 end
 
 CED=unique(ejem,'stable');
 DIS_CED=length(CED)
 
 for i=1:DIS_CED;
matriz=strcmp(ejem,CED{i});
matriz2=find(matriz==1);
vi=genvarname(['C',num2str(i)]);%tenemos las posiciones de los repetidos
eval([vi, '=matriz2']);
%k=ejem(C1)
 end
 
 for i=C1(1):C1(length(C1))
CGG1{i,1}=ejem(C1(i))
CGG1(i,2)=ejem2(C1(i))
CGG1{i,3}=ejem3(C1(i))
 end

puse lo siguiente:
1
2
3
4
5
for i=1:C2(end)
CGG2{i,1}=ejem(C2(i))
CGG2(i,2)=ejem2(C2(i))
CGG2{i,3}=ejem3(C2(i))
  end % pero me salé error y más aún con CGG3 

Estos son los resultados:
1
2
3
4
5
CGG1={
'BPAC'	26	'B.QUISHPEZ'
'BPAC'	26	'C.VINUEZA'
'BPAC'	26	'D.CALERO'
'BPAC'	26	'R.GUTIERREZ' }

Esto espero para todos los CGG, pero sin embargo solo quisiera no repetir el código para cada CGG sino que una sola vez hacer el código, quizas algo así como puso en el ejemplo anterior, código como esté que hizó usted:

1
2
3
4
5
6
7
8
nombre=whos('C*');
for j=1:length(AED)
    c=eval(nombre(j).name)
    for i=c(1):c(end)
     vi=genvarname(['CG',num2str(j)]);%tenemos las posiciones de los repetidos
     eval([vi, '=5+6']);
    end
end

Muchas gracias por la atención prestada muy sinceramente a esto que no sé como hacer.
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

llamar variables del workspace

Publicado por victor (8 intervenciones) el 09/03/2017 21:24:42
Estimado, por fin pude hacer el código para lo que había mencionado, si a alguien alguna vez les sirve dejo esto por aquí:
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
[m,n]=size(GC);
for k=1:n
 for j=1:m;
          if isempty(GC{j,1})==1
            ejem{j,k}=ejem{j-1,k};
            ejem2{j,1}=ejem2{j-1};
           else
            ejem{j,k}= (GC{j,k});
            ejem2{j,1}=(GC{j,1});
          end
 end
 end
 
 CED=unique(ejem2,'stable');
 DIS_CED=length(CED)
 
 for i=1:DIS_CED;
matriz=strcmp(ejem2,CED{i});
matriz2=find(matriz==1);
vi=genvarname(['C',num2str(i)]);%tenemos las posiciones de los repetidos
eval([vi, '=matriz2']);
%k=ejem(C1)
 end
 
 nombre=whos('C*');
for j=1:length(CED)
    c=eval(nombre(j).name);
    z=ejem(c(1):c(end),:)
        vi=genvarname(['CG',num2str(j)]);
     eval([vi, '=(z)']);
end

Espero les sirva, gracias por toda la atención prestada estimado.
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