Matlab - Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

 
Vista:
sin imagen de perfil

Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

Publicado por García (42 intervenciones) el 01/01/2015 20:30:25
Quiero inicializar matrices de forma vectorizada a partir de que los valores de una determinada matriz sean "0" o "1". Me gustaría la alternativa a los bucles for, para hacer, por ejemplo:

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
Em=rand(3,7,2);
u=rand(3,7,2);
R=rand(3,7,2);
Pg=zeros(3,7,2);
K=zeros(3,7,2);
p=0.45;
perc=0; % Podría tomar valores 0 o 1
 
R(R(:,:,:)<=p)=1,R(R(:,:,:)~=1)=0;
 
for k=1:size(R,3)
        for j=1:size(R,2)
            for i=1:size(R,1)
 
                %Si es igual a cero calculamos la nueva probabilidad de ser    
                %ocupado por un ión
                if R(i,j,k)==0 %1
 
                    %El campo eléctrico será el calculado anteriormente con
                    %la función campo eléctrico
                    F=Em(i,j,k);
 
 
                    %Temperatura calculada en el instante anterior con la
                    %función heat
                    T=u(i,j,k);
 
                    format long;
 
                    %Dependiendo de si percola o no utilizaremos diferente
                    %parametro de ajuste Go y G1.
                    if(perc==0)
 
                      Pg(i,j,k)=F/T;
 
                    else
 
                      Pg(i,j,k)=F*T;
 
                    end
 
                end
 
                %En el caso de que ya esté ocupado la probalidad es 1.
                if R(i,j,k)==1
                    Pg(i,j,k)=1;
                end
            end
        end
    end

Muchas gracias,
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 Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

Publicado por Daniel (264 intervenciones) el 21/01/2015 21:38:03
Veo que todo los for se puede escribir de manera mas compacta así


1
2
3
4
5
6
7
8
9
F=Em(R==0);
T=u(R==0);
if(perc==0)
    Pg(R==0)=F./T;
else
    Pg(R==0)=F.*T;
end
Pg(R==1)=1;
Pg=reshape(Pg,[3 7 2]);

Espero que sirva

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Inicializar matrices 3D de forma vectorizada a partir de los valores de otras matrices 3D

Publicado por García (42 intervenciones) el 22/01/2015 12:24:01
Muchas gracias.
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